1

我正在使用 VisualVM + VisualGC 分析此工具的内存使用情况。我注意到一些我没有预料到的事情,这可能暴露了我对 JVM 和堆转储的误解。

为了给出完整的上下文,我正在分析的应用程序会查找一个巨大的序列化 blob,然后我正在打印使用jamm的大小。之后,该应用程序就坐在那里等待中止。

使用 VisualVM,我看到堆使用量按预期增长。一旦操作完成并且应用程序只是坐在那里睡觉,我会使用 VisualVM 触发一次 GC(或者更确切地说,是多个 GC,点击按钮我会忘乎所以)。

  • 此时已用堆为 ,1,849,825,472 bytesPermGem 已用空间为25,864,448 bytes.
  • 此时,我执行了一个堆转储,这显然需要一段时间,但是当堆转储完成时,使用的堆仍然1,944,542,296 bytes与 PermGen 大致相同25,892,800 bytes

  • 重点是:堆转储显示的总字节数为2,299,816,089.

什么可以解释这种差异?我重复了几次实验,我总是得到相同的结果。

4

0 回答 0