如何确定Java应用程序的年轻gc的原因

时间:2015-08-25 03:09:57

标签: java garbage-collection

最近我发现它在我的java应用程序中经常有一个年轻的gc。由于我有一个1600M的年轻一代,并且它每10秒做一次年轻的gc,我认为有太多不必要的对象导致这些gcs。

我知道我可以使用jmap来执行heapdump来找出导致完整gc的原因。但是我如何才能找到年轻人中的一些东西(导致一个堆肥应该清理年轻人并且年轻人一直在变化)

另一个问题:jstat -gcutil会增加gc频率吗?

1 个答案:

答案 0 :(得分:1)

选项1 - SJK's hh command 它正在使用jmap发动机罩。如果您使用--dead-young运行它,它将执行以下操作。

  • 执行完整GC
  • 等待10秒钟(产生新鲜垃圾)
  • 不带GC的堆直方图
  • 立即执行GC并采用直方图(如jmap --live)
  • 比较两个直方图和返回差异 - 在过去10秒内创建并被收集的对象。

选项2 - Java Mission Control 它是Java 8 JDK的一部分。它可以在TLAB分配失败时对对象分配进行采样。虽然不准确,但在实践中检测垃圾点非常有用。

jstat -gc不执行GC,它通过内存映射文件使用信息。 JVM将一些指标转储到该文件,jstat轮询它。