目的是减少老一代的大小以降低 gc 暂停。
据我了解,Chronicle Map 会将对象存储在本机空间中,并且(从 java 8 开始)String#intern 也会这样做,因为实习字符串位于元空间中。
每当我需要使用纪事地图时,我都很好奇,或者坚持实习方法是可以的。
目的是减少老一代的大小以降低 gc 暂停。
据我了解,Chronicle Map 会将对象存储在本机空间中,并且(从 java 8 开始)String#intern 也会这样做,因为实习字符串位于元空间中。
每当我需要使用纪事地图时,我都很好奇,或者坚持实习方法是可以的。
ChronicleMap 不能直接替代,String.intern()
因为java.lang.String
实例总是在堆上。因此,您实际上不会赢得任何东西,甚至将字符串存储在 ChronicleMap 中,因为在使用它们之前,您会将它们反序列化为堆上对象。
ChronicleMap 作为一种数据结构,(不一定是 Java 实现,可能是 C++)确实可以用于某种缓存文本数据,尤其是进程间。但我怀疑它与您所寻求的相去甚远。例如在 Java 方面,它需要一个单独的值类(notString
和 not StringBuilder
),CharSequence
最好是实现。
此外,您很可能不需要intern
,但重复数据删除可能更有效,请参阅java.lang.String
教理问答,“实习生”部分。