由于String
在Java中(像其他语言一样)消耗大量内存,因为每个字符占用两个字节,Java 8引入了一个名为String Deduplication的新功能,它利用了char数组是字符串内部的最终事实,因此JVM可以搞砸他们.
到目前为止,我已经阅读了这个例子,但由于我不是一个专业的java编码器,我很难掌握这个概念.
这是它说的,
已经考虑了各种字符串复制策略,但现在实现的策略遵循以下方法:每当垃圾收集器访问String对象时,它会记录char数组.它接受它们的哈希值并将其与对数组的弱引用一起存储.一旦找到另一个具有相同哈希码的String,就会将它们与char进行比较.如果它们匹配,则将修改一个String并指向第二个String的char数组.然后不再引用第一个char数组,并且可以进行垃圾回收.
整个过程当然会带来一些开销,但是受到严格的限制.例如,如果找不到字符串有一段时间的重复项,则不再检查它.
我的第一个问题,
由于最近在Java 8更新20中添加了这个主题,因此仍然缺乏资源,这里是否有人可以分享一些关于如何帮助减少String
Java 消耗内存的实际示例?
编辑:
上面的链接说,
一旦找到另一个具有相同哈希码的String,就会将它们与char进行比较
我的第二个问题,
如果两个哈希码String
相同,则Strings
已经是相同的,那么为什么对它们进行比较char
的char
,一旦发现,这两个String
具有相同的散列码?
我需要一种能够从ubuntu上的linux控制台脚本触发完整GC的方法.我知道这是非常糟糕的做法,但没有太多的细节,这使我的服务器保持运行,这只是在我修复实际问题的1或2天,所以我不必在夜间醒来并执行通过jconsole或jvisualvm手动GC.
或者,我必须制作一个鼠标脚本,每3-4小时左右点击一次按钮,这更糟糕.
请帮忙.