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

时间:2015-02-05 12:51:11

标签: java memory logging garbage-collection jvm

Java heap is divided into regions known as generations,例如新一代,可以进一步划分,例如伊甸园空间。使用-XX:+PrintHeapAtGC JVM选项,每个堆区域的三个内存地址将以[A, B, C)的形式打印在GC日志中,其中A,{{1} }和B是内存地址,例如:

C

这些内存地址的含义是什么?

我在网上搜索过但无法找到这部分GC日志的任何解释。

1 个答案:

答案 0 :(得分:4)

A (bottom) - 保留存储区的较低地址;
B (top) - 指向已分配区域顶部的当前指针;
C (end) - 保留内存区域的上限。

以下是对源代码的相关引用。

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());
}