jdk的UseCompressedOops的功能是什么?

时间:2014-09-21 02:59:50

标签: java c++ jvm

请参阅以下内容:

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行。

1 个答案:

答案 0 :(得分:1)

对不起,每个人,我都在这里回答我自己的问题。

_prev =(ptr | 0x1);它的意思是_prev可以免费使用。

如果地址指针的最后一位为1表示地址指针指向的空间是空闲的。

同样,最后一位为0表示不是免费的。

我猜这只是一个jdk实现技巧。