请参阅以下内容:
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 / hotspot / src / share / vm / gc_implementation / concurrentMarkSweep / freeChunk.hpp第118行。
答案 0 :(得分:1)
对不起,每个人,我都在这里回答我自己的问题。
_prev =(ptr | 0x1);它的意思是_prev可以免费使用。
如果地址指针的最后一位为1表示地址指针指向的空间是空闲的。
同样,最后一位为0表示不是免费的。
我猜这只是一个jdk实现技巧。