使用 -XX:+PrintHeapAtGC 的 GC 日志中堆内存地址的含义?
Meaning of heap memory addresses in GC logs using -XX:+PrintHeapAtGC?
Javaheap is divided into regions known as generations,例如新一代,可以进一步划分,例如伊甸园space。使用 -XX:+PrintHeapAtGC
JVM 选项,每个堆区域的三个内存地址以 [A, B, C)
的形式打印在 GC 日志中 ,其中 A
,B
和C
是内存地址,例如:
eden space 838912K, 100% used [0x000000073ae00000, 0x000000076e140000, 0x000000076e140000)
这些内存地址是什么意思?
我在网上搜索过,但找不到关于这部分 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()); }
void ContiguousSpace::print_on(outputStream* st) const {
print_short_on(st);
st->print_cr(" [" INTPTR_FORMAT ", " INTPTR_FORMAT ", " INTPTR_FORMAT ")",
bottom(), top(), end());
}
Javaheap is divided into regions known as generations,例如新一代,可以进一步划分,例如伊甸园space。使用 -XX:+PrintHeapAtGC
JVM 选项,每个堆区域的三个内存地址以 [A, B, C)
的形式打印在 GC 日志中 ,其中 A
,B
和C
是内存地址,例如:
eden space 838912K, 100% used [0x000000073ae00000, 0x000000076e140000, 0x000000076e140000)
这些内存地址是什么意思?
我在网上搜索过,但找不到关于这部分 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()); }
void ContiguousSpace::print_on(outputStream* st) const {
print_short_on(st);
st->print_cr(" [" INTPTR_FORMAT ", " INTPTR_FORMAT ", " INTPTR_FORMAT ")",
bottom(), top(), end());
}