【发布时间】:2015-12-27 13:59:05
【问题描述】:
我正在阅读 Java 8 更新 20 中用于字符串重复数据删除 (more info) 的功能,但我不确定这是否基本上会使 String.intern() 过时。
我知道这个 JVM 功能需要 G1 垃圾收集器,这可能不是许多人的选择,但假设使用 G1GC,JVM 自动重复数据删除有什么区别/优点/缺点与手动必须intern 你的字符串(一个明显的优点是不必通过调用intern() 来污染你的代码)?
考虑到 Oracle 可能将 G1GC 设为 java 9 中的默认 GC,这尤其有趣
【问题讨论】:
-
Suggested video -- 但无论如何,结论总是一样的:你。应该。不是。关心。
-
对不起,应该不在乎什么?关于使用哪个(意味着它们是等价的)或关于新功能(意味着它没那么有用)??
-
含义:随便使用
String类就行了。 -
好问题。将这些功能添加到 JVM 中暗示了开发人员专注于编码而不是内存管理。您不应该使用
String.intern()或System.gc()- 让 VM 完成它的工作。 -
@DavidConrad 在完整的引用中,Knuth 实际上量化了他的建议:“我们应该忘记小的效率,比如说大约 97% 的时间。过早的优化是万恶之源”。所以 Knuth 确实关心低级性能(非常关心 - 请参阅编程艺术中的详细信息)和 3% 的代码(整个应用程序)将从一些关注和调整中受益。但是,是的,要点:一周中的任何一天都优先考虑自己的时间而不是 CPU 时间。 :-)
标签: java string jvm-hotspot deduplication