2015-02-05 41 views
4

Java heap is divided into regions known as generations,例如, 新一代,其可以進一步分開,例如, 伊甸園空間。使用-XX:+PrintHeapAtGC JVM選項,3爲每個堆區的存儲器地址被印刷在GC日誌形式[A, B, C),其中ABC是存儲器地址,例如:GC日誌中堆內存地址的含義使用-XX:+ PrintHeapAtGC?

eden space 838912K, 100% used [0x000000073ae00000, 0x000000076e140000, 0x000000076e140000) 

的含義是什麼這些內存地址?

我已經搜索了網頁,但無法找到這部分GC日誌的任何解釋。

回答

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

WRT'B(上)',我在想,這是意義,因爲GC在堆區已壓 「向左」 是否正確? – DontDivideByZero 2015-02-05 16:47:50

+1

@coxjam所有NewGen空格都是連續的,這意味着分配是通過一個簡單的指針增量「從左到右」完成的。 'top'就是這個指針。它下面的所有區域都是使用區域,其上方區域是免費區域。 – apangin 2015-02-05 18:45:48