??Java String??????£?
??????С?? ???????[ 2016/9/27 11:42:42 ] ??????????????????? Java String
????String.intern()???
????String.intern()?????Native????????????C++?? StringTable::intern ??????????????????? intern ????????????????????????????????????е??????????????????????????????У?????????????????á?
????package com.ctrip.ttd.whywhy;
????class Test {
????public static void main(String args[]) {
????String s1 = new StringBuilder().append("String").append("Test").toString();
????System.out.println(s1.intern() == s1);
????String s2 = new StringBuilder().append("ja").append("va").toString();
????System.out.println(s2.intern() == s2);
????}
????}
?????? JDK6 ?? JDK7 ?н?????????
????1??JDK6????н????false false
??????????????????????JDK6?У????????????????棬????Java????????????????????intern????????????????????????????????????????????и????????????????????????????????????intern??????????????????????????????????????????????PermGen????????
????2??JDK7????н????true false
???????????????е????????JDK7?У????????????Java?????????棬???intern??????????????????????????????????????????????????????????????????????????????в????????????JDK7?У???????????????intern??????????String??????????????
???????????s1????????????? “StringTest” ???????s1.intern() ?? s1???????Java???????String????
???????????s2????????????????????? “java” ??????????? s2.intern() ??????????? “java” ??????????á?
????String.intern()????
???????????????StringTable???????????????????????HashMap????????????????hashcode??λ??????????飬??????????????????????????????????????Ч???
??????JDK6?У????????????PermGen?У????????С????????????????÷?????
??????JDK7??8?У????????-XX:StringTableSize????StringTable??С?????????????????????????intern???????????
????public class StringTest {
????public static void main(String[] args) {
????System.out.println(cost(1000000));
????}
????public static long cost(int num) {
????long start = System.currentTimeMillis();
????for (int i = 0; i < num; i++) {
????String.valueOf(i).intern();
????}
????return System.currentTimeMillis() - start;
????}
????}
?????????????intern()?????????StringTableSize??????????£?
????1??-XX:StringTableSize=1009?? ??????23000ms??
????2??-XX:StringTableSize=10009?? ??????2200ms??
????3??-XX:StringTableSize=100009?? ??????200ms??
????4?????????£???????400ms??
?????????StringTableSize?£???в????intern()??????????????£?
????1?????Σ???????5ms??
????2?????Σ???????25ms??
????3???????Σ???????130ms??
????4???????Σ???????400ms??
????5???????Σ???????5000ms??
????6??????Σ???????15000ms??
????????Щ??????????????????????Java 7?????intern()??????μ????????????????????????????????????intern(????????????????????????????????????????????????????????????????????????intern()???????????н???
????END??
??????
![](/images/ad-banner/ad-banner.png)
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11