为了降低堆使用率,使用 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" 部分。
目的是减少老年代的大小以减少 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" 部分。