使用-XX:+ PrintHeapAtGC在GC日志中看到的堆内存地址的含义是什么?

5
1个回答

5

A (底部) - 预留内存区域的较低地址;
B (顶部) - 分配区域顶部的当前指针;
C (结束) - 预留内存区域的上限。

以下是与源代码相关的参考资料。

space.hpp:

// Size computations: sizes in bytes.
size_t capacity() const        { return byte_size(bottom(), end()); }
size_t used() const            { return byte_size(bottom(), top()); }
size_t free() const            { return byte_size(top(),    end()); }

space.cpp:

void ContiguousSpace::print_on(outputStream* st) const {
  print_short_on(st);
  st->print_cr(" [" INTPTR_FORMAT ", " INTPTR_FORMAT ", " INTPTR_FORMAT ")",
                bottom(), top(), end());
}

关于 B (top),我认为这是有意义的,因为在垃圾回收期间堆区域已经向“左侧”压缩了。 - DontDivideByZero
1
@coxjam 所有的NewGen空间都是连续的,这意味着分配是通过简单的指针增量“从左到右”完成的。top正是这个指针。它下面的所有区域都被使用了,而它上面的区域则是空闲的。 - apangin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接