Java:String.intern和String deduplication

目录

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值