我的上一篇文章是在几周前写的,在收到一些有效的反馈后,我想澄清几点,作为本文的序言。
“ 使用零垃圾创建数百万个对象 ”的主要收获应该是,使用Chronicle,在编写Java程序时,您不会“局限于”使用jvm分配的堆内存。 也许这篇文章更恰当地标题为“使用零堆创建数百万个对象”。 我想指出的另一点是,当您没有堆内存时,不会引起GC活动。
我使用术语“垃圾”来描述分配在堆上的对象的事实使人感到困惑。 尽管分配的对象引起GC活动,但实际上它们不是垃圾。
我设计了一个示例来说明一个,一个是ChronicleMap不使用堆内存,而ConcurrentHashMap则使用第二个;当您使用堆内存时,您不能忽略GC。 至少您需要仔细调整系统,以确保您不会因为长时间的GC暂停而遭受痛苦。 这并不意味着从堆外分配没有任何问题(请参阅本文的结尾),也并不意味着您无法通过堆上解决方案进行优化以消除GC。 摆脱困境绝不是解决所有Java性能问题的灵丹妙药,但是对于非常具体的解决方案,它可以