java 完整GC期间的线程转储

ulydmbyx  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(141)

我想知道是否有可能在Full GC期间获得 * 线程转储 *。
我现在在做什么,

  • 在完整GC期间获取时间戳/日期戳
  • 将其与日志进行比较,缩小可能触发它的 * 请求 * 或 * 操作 * 范围。

我只是想知道是否有可能在Full GC期间获得***线程转储***。

4urapxun

4urapxun1#

在GC过程中无法获得任何详细信息,现在可以通过jstat获得各个堆的大小,但如果您的完整GC是一个stop-the-world- collection,则意味着其他所有操作都已停止。
另外,如果你能获得这些信息,它不太可能是你需要知道的,它只是一个随机样本,所以除非只有一个地方触发了gc,例如调用System.gc(),或者只有一个地方分配,否则它不会很有用。
如果你想知道System.gc()是在哪里被触发的,你可以使用插装(或者修改的System类)在显式调用它的地方做一个堆栈跟踪。
如果你想知道哪里的内存分配率最高,我建议你使用内存分析器,这就是这些工具的作用,它可以向你显示在哪里创建了最多/最大的对象。

hfsqlsce

hfsqlsce2#

使用-XX:+HeapDumpBeforeFullGC。堆转储还应该包含线程堆栈,因为它们是GC根。

相关问题