1

目的是减少老一代的大小以降低 gc 暂停。

据我了解,Chronicle Map 会将对象存储在本机空间中,并且(从 java 8 开始)String#intern 也会这样做,因为实习字符串位于元空间中。

每当我需要使用纪事地图时,我都很好奇,或者坚持实习方法是可以的。

4

1 回答 1

3

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

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

此外,您很可能不需要intern,但重复数据删除可能更有效,请参阅java.lang.String教理问答,“实习生”部分。

于 2015-08-17T22:00:08.873 回答