假设您获得Java堆转储以分析内存泄漏(在-XX:+HeapDumpOnOutOfMemoryError
之后或来自非受控方)。
如何通过调用某个GC进程来减少转储中的对象数量,这在任何情况下都可以在转储过程后由GC清除?
答案 0 :(得分:4)
如果在GC之后仍然没有足够的空间,Java将只会引发内存不足错误。因此,没有对象计数可以减少,堆中的每个对象仍然可以从某个地方到达,或者它会在OOM错误之前由GC清理。
答案 1 :(得分:1)
可能的解决方案;
您无法转储PermGen,您的转储只有可到达的对象,或者您首先没有OOME。
答案 2 :(得分:0)
似乎Eclipse Memory Analyzer Can I run Java garbage collection against a heap dump file?这样做:
By default unreachable objects are removed
@Guntram Blohm。正如你所说,OOME的原因是内存不足或存储管理器无法回收足够的内存。如果您需要长阵列的碎片存储器,可能根本没有执行GC!