主GC未在G1中运行

时间:2019-09-18 11:22:10

标签: java garbage-collection g1gc

在分析应用程序的性能问题后,需要注意以下几点。

  • JVM使用G1 GC
  • 在高峰时段JVM暂停超过20%
  • 对于伊甸园空间-每分钟的GC计数为20,每分钟的GC时间为10秒(不是毫秒)
  • 对于旧一代空间-没有运行GC。它稳定增加,但也随机显示出一些减少(令人惊讶)。
  • 垃圾收集的CPU使用率约为7%,而应用程序约为30%(包括后台和Web请求)

我试图收集有关G1的更多详细信息,但仍有一些问题没有答案。如果可以的话,请帮忙。

  1. 如果使用G1,是否存在次要,主要或完整的GC?如果没有这样的分类,为什么旧​​一代不运行GC? Documentation不确定。
  2. 即使GC不是针对老一代运行的,即使内存很小,如何释放内存? (例如,已用内存从16GB减少到15GB,然后又增加到16GB)

2 个答案:

答案 0 :(得分:0)

关于第一个问题。作为G1的垃圾回收器实现背后的思想是最小化甚至避免执行完整的或主要的垃圾回收,因为这是一个世界停止事件,其复杂性会导致更长的暂停和CPU消耗。即使在使用吞吐量GC时,我也始终在尝试减少完整垃圾收集的数量,因此我想说,您的系统在不执行完整GC的情况下运行确实非常好。

此外,请记住,如果您使用的JDK版本低于10,则如我在本文中指出的那样,使用G1的Full GC的执行将仅使用一个线程。

Java 7 G1GC strange behaviour

  

顺便说一句,它似乎是Java(10)的最新版本,它将包含一个G1,该G1具有并行执行Full GC的能力。

关于第二个问题。使用次要GC清理内存,这就是为什么看到堆消耗减少的原因。

在此文档中,您可以找到有关G1的详细说明。

http://blog.sysco.no/files/guides/JVMGarbageCollectionV1.1.pdf

花花公子

答案 1 :(得分:0)

我提供了说明文件,其中解释了G1使用称为混合集合的内容。

http://blog.sysco.no/files/guides/JVMGarbageCollectionV1.1.pdf

enter image description here