java字符串去重_Java8新特性之字符串去重介绍

java字符串去重_Java8新特性之字符串去重介绍导读热词 8 月 19 日 Oracle 发布了 JDK8u20 JDK8u20 包含很多新特性 比如 Java 编译器更新 支持在运行时通过 API 来修改 MinHeapFreeR 和 MaxHeapFreeR 参数 新的 GC 调优指南文档 不过在众多新特性中 最令人期待的还属字符串去重 StringDedupl 如何减少内存占用一直是一个永恒的话题 而在 Java 应用中 经常会看到 St

导读热词

8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新、支持在运行时通过API来修改MinHeapFreeRatio和MaxHeapFreeRatio参数、新的GC调优指南文档。不过在众多新特性中,最令人期待的还属字符串去重(String Deduplication )。如何减少内存占用一直是一个永恒的话题,而在Java应用中,经常会看到String对象会占用应用30%的内存,它是Java中最常用的对象之一。新的字符串去重特性可以帮助减少应用中String对象的内存占用,目前该特性只适用于G1垃圾收集器,并且默认不被开启。

Fabian Lange解释了字符串去重特性的实现方式:

垃圾收集器会在访问String对象时对其字符数组进行标记,并将String的哈希值以及弱引用保存到一个数组中。当垃圾收集器发现另一个具有相同哈希值的String对象时,它就会逐字符比对这两个对象。如果他们完全匹配,那其中一个String就会被修改指向到另一个String的字符数组。由于第一个字符数组已经不再被引用,所以它也就可以被回收了。垃圾收集器会尽量减少整个操作的开销,比如某个String对象扫描未发现有重复,那接下来的一段时间内它不会再被检查。

紧接着,Fabian Lange通过代码的方式解释了字符串去重特性的神奇效果。首先使用Java 8 Update 20通过参数-Xmx256m -XX:+UseG1GC运行以下代码:

public class LotsOfStrings {

private static final LinkedList LOTS_OF_STRINGS = new LinkedList<>();

public static void main(String[] args) throws Exception {

int iteration = 0;

while (true) {

for (int i = 0; i < 100; i++) {

for (int j = 0; j < 1000; j++) {

LOTS_OF_STRINGS.add(new String(“String ” + j));

}

}

iteration++;

System.out.println(“Survived Iteration: ” + iteration);

Thread.sleep(100);

}

}

}

代码会在30次循环之后因OutOfMemoryError异常而结束运行。在使用参数 -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics开启字符串去重特性后,程序可以多运行一段时间。通过JVM的日志也可以详细了解整个去重过程的详细信息。请读者自行测试。

最后,Fabian Lange还解释了字符串去重与字符串驻留的区别,它们很相似,除了字符串驻留重用了整个的String实例,而字符串去重只是针对String的字符数组。

(全文完)

相关文章

总结

以上是编程之家为你收集整理的Java8新特性之字符串去重介绍全部内容,希望文章能够帮你解决Java8新特性之字符串去重介绍所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:(已满)交流2群:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225998.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:04
下一篇 2026年3月17日 上午8:05


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号