JVM专题

jvm专题:5.String.intern()与youngGC

2019-02-22  本文已影响0人  北交吴志炜

原文见寒泉子公众号
https://mp.weixin.qq.com/s?__biz=MzIzNjI1ODc2OA==&mid=2650886867&idx=1&sn=e4433f7068357b0f9ed283b607fa50e6&chksm=f32f666cc458ef7a0132c6dfb74bc53626b47d884db7ae1b29a41bea3527e416c87c71c49fbc&mpshare=1&scene=1&srcid=0222NoJinYt1zKTEcDnjoDTI&pass_ticket=gWT6GZkMbEjTOKIbY3qPLab4pug0CuzC81um7IWCL9bIqXnpvzZw%2BGzhr94B2me%2B#rd

String.intern()的作用是,相同的字符串,在jvm内存中只保留一份。
具体的实现原理是,jvm维护了一个StringTable,其数据结构为一个HashTable。
每次调用String.intern()方法时,会去HashTable里面查找,如果key存在,那么返回value,即已经存在的字符串对象。如果是新的字符串,则put一条新记录,下次调用时可以直接返回,以此实现只保留一份。

YoungGC为了避免该StringTable中,处于年轻代的String对象被清理,在清理之前会扫描该StringTable。如果Stringtable中有大量的不同字符串,那么扫描自然就很耗时(那么jdk1.8中,hashmap的数据结构引入了红黑树,是不是这部分时间会变小呢?)。

上一篇下一篇

猜你喜欢

热点阅读