我正在运行 Apache Ignite 应用程序。当我使用 linux free
看到内存使用情况时,我得到的已用内存为 9.8 GB。但是当我使用 eclipse MAT 进行堆转储时,其大小仅为 1.8 GB 左右。为什么会发生这种情况? ignite 中分配的默认堆内存为 21 GB。我也没有做过任何 GC 调优。
最佳答案
当 Eclipse 进行堆转储时,它很可能会强制进行完全垃圾回收,以便您只能看到实际在内存中的对象。 JVM本身不会这样做,因为堆非常大,并且仍然有大量可用内存。顺便说一句,这种情况最终会导致您的 Ignite 节点在很长一段时间内无响应。我建议每个节点分配的内存不要超过 10-12GB。
关于java - 应用程序使用的内存大于实际堆转储大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40906307/