8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新、支持在运行时通过API来修改MinHeapFreeRatio和MaxHeapFreeRatio参数、新的GC调优指南文档。不过在众多新特性中,最令人期待的还属字符串去重(String Deduplication )。如何减少内存占用一直是一个永恒的话题,而在Java应用中,经常会看到String对象会占用应用30%的内存,它是Java中最常用的对象之一。新的字符串去重特性可以帮助减少应用中String对象的内存占用,目前该特性只适用于G1垃圾收集器,并且默认不被开启。
Fabian Lange解释了字符串去重特性的实现方式:
紧接着,Fabian Lange通过代码的方式解释了字符串去重特性的神奇效果。首先使用Java 8 Update 20通过参数-Xmx256m -XX:+UseG1GC运行以下代码:
private static final LinkedList<String> 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);
}
}
}
本文地址:https://www.stayed.cn/item/26057
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我