我如何理解频繁进行垃圾回收的原因?
我如何理解频繁进行垃圾回收的原因?
我添加了EU
和OU
来查找堆使用的总量。看起来使用了6GB。我参考了这个。\n但是已经发生了400+次FGC。现在已经达到了700+。过了一段时间后,它只执行GC。现在已经是850+了。\n我的工作:\n这是多线程的,有100个读取器线程和100个写入器线程。每个线程都有自己连接到数据库。每个读取器线程读取100000条记录并存储在一个LinkedList
中,并发送给写入器线程。写入器将数据写入同一数据库中的另一个集合。LinkedList没有被重用,意味着每1L都创建一个新的LinkedList。\n这是基于akka
的多线程。所以我不处理线程故障、线程生成等线程管理工作。\n但是我想知道为什么在我有32GB内存的情况下会发生如此大量的FGC?有没有进一步的指导?\n有时会遇到GC超过限制的错误。\n我没有为任务设置任何明确的最小和最大内存。\n编辑:\n根据我的分析,它已经修复了一些EU
和OU
。它是满的,因此一直在执行GC。这可能吗,我是正确的吗?\n编辑2:\n感谢@emotionlessbanans,@Cascader。我有以下内容。\n
uintx ErgoHeapSizeLimit = 0 {product} uintx HeapSizePerGCThread = 87241520 {product} uintx InitialHeapSize := 526385152 {product} uintx LargePageHeapSizeThreshold = 134217728 {product} uintx MaxHeapSize := 8392802304 {product} java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
\n当我有8GB内存时,为什么只停在6GB?还是我漏掉了什么?