Java:String.intern和String deduplication

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/netyeaxi/article/details/89290132

目录

String deduplication

String.intern


String deduplication

字符串去重是从Java 8 update 20开始添加的特性。当G1收集器开始minor GC时,未被处理的字符串会通过hash值和其中的char[],查找是否有相同的字符串,如果找到,则此字符串中的char[]替换成找到的字符串中的char[],被替换掉的char[]将被回收。

-XX:+UseG1GC -XX:+UseStringDeduplication   这两个JVM选项同时使用才可以打开此特性。此参数为全局参数,将会影响所有字符串,并会增加CPU开销。
-XX:StringDeduplicationAgeThreshold=3   3为默认值。只有字符串在三次minor GC后还存活时,才会做去重。
-XX:+PrintStringDeduplicationStatistics  查看统计信息。


String.intern

字符串驻留是从Java 6开始添加的特性。会将字符串放入字符串池中。

从Java 6开始,字符串池放在PermGen中。在Java6u30前此值为一个常量1009。从Java6u30开始,可通过-XX:StringTableSize进行配置。
从Java 7开始,字符串池放在椎中。从Java7u40开始默认值变为60013。

-XX:StringTableSize  设置字符串池的大小,值最好取素数。
-XX:+PrintStringTableStatistics   查看统计信息。

参考文档

String.intern in Java 6, 7 and 8 – string pooling
String deduplication feature (from Java 8 update 20)
JEP 192: String Deduplication in G1
Save Memory by Using String Intern in Java

猜你喜欢

转载自blog.csdn.net/netyeaxi/article/details/89290132