2014-09-21 85 views
0

請參閱以下內容:jdk的UseCompressedOops的功能是什麼?

void link_prev(FreeChunk* ptr) { 
    LP64_ONLY(if (UseCompressedOops) _prev = ptr; else) 
    _prev = (FreeChunk*)((intptr_t)ptr | 0x1); 
} 

如果沒有LP64爲什麼要「_prev = PTR | 0x1'而不是'_prev = ptr'直接?

此代碼是從jdk8/OpenJDK的/熱點/ src目錄/股/ VM/gc_implementation/concurrentMarkSweep/freeChunk.hpp線118

回答

0

對不起,每個人,我在這裏回答我的問題。

_prev =(ptr | 0x1);這意味着_prev可以免費使用。

如果地址指針的最後一位是1,則表示地址指針指向的空間是空閒的。

類似的最後一位是0意味着不自由。

這只是一個jdk實現技巧我猜。