Don*_*ero 5 java memory logging garbage-collection jvm
Java堆被划分为称为代的区域,例如新一代,可以进一步划分,例如伊甸园空间。使用-XX:+PrintHeapAtGCJVM选项,每个堆区三个存储器地址被打印在GC日志的形式[A, B, C),其中A,B和C是存储器地址,例如:
eden space 838912K, 100% used [0x000000073ae00000, 0x000000076e140000, 0x000000076e140000)
Run Code Online (Sandbox Code Playgroud)
这些内存地址的含义是什么?
我在网上搜索过,但找不到对 GC 日志这部分的任何解释。
A (bottom)- 保留内存区域的低地址;
B (top)- 当前指向已分配区域顶部的指针;
C (end)- 保留内存区域的上限。
以下是源代码的相关参考。
// 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()); }
Run Code Online (Sandbox Code Playgroud)
void ContiguousSpace::print_on(outputStream* st) const {
print_short_on(st);
st->print_cr(" [" INTPTR_FORMAT ", " INTPTR_FORMAT ", " INTPTR_FORMAT ")",
bottom(), top(), end());
}
Run Code Online (Sandbox Code Playgroud)