jvm专题:5.String.intern()与youngGC
2019-02-22 本文已影响0人
北交吴志炜
String.intern()的作用是,相同的字符串,在jvm内存中只保留一份。
具体的实现原理是,jvm维护了一个StringTable,其数据结构为一个HashTable。
每次调用String.intern()方法时,会去HashTable里面查找,如果key存在,那么返回value,即已经存在的字符串对象。如果是新的字符串,则put一条新记录,下次调用时可以直接返回,以此实现只保留一份。
YoungGC为了避免该StringTable中,处于年轻代的String对象被清理,在清理之前会扫描该StringTable。如果Stringtable中有大量的不同字符串,那么扫描自然就很耗时(那么jdk1.8中,hashmap的数据结构引入了红黑树,是不是这部分时间会变小呢?)。