为了降低堆使用率,使用 Chronicle Map for java.util.String 比 .`intern` 方法有什么优势吗?

Are there any advantages of using Chronicle Map for java.util.String over .`intern` method for the purpose of lowering heap usage?

目的是减少老年代的大小以减少 gc 暂停。

根据我的理解,Chronicle Map 将在原生 space 中存储对象并且(从 java 8 开始)String#intern 将做同样的事情,因为 interned 字符串在 metaspace 中。

好奇什么时候需要用chronicle map,要不还是坚持用intern方法吧

ChronicleMap 不能作为 String.intern() 的直接替代品,因为 java.lang.String 实例总是在堆上。所以你实际上不会赢得任何东西,即使是将字符串存储在 ChronicleMap 中,因为在使用它们之前你会将它们反序列化为堆上对象。

ChronicleMap 作为一种数据结构(不一定使用 Java 实现,可能是 C++)确实可以用于某种缓存文本数据,尤其是进程间。但我怀疑这与你所寻求的相去甚远。例如在 Java 方面,它将需要一个单独的值 class(不是 String 也不是 StringBuilder),最多实现 CharSequence

此外,您很可能不需要 intern,但重复数据删除可能会更有效,请参阅 java.lang.String Catechism 讨论,"Intern" 部分。