-XX:+UnlockDiagnosticVMOptions
和-XX:+PrintCompressedOopsMode
,我将看到类似以下内容的日志输出:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
这表示启用了基于零的压缩 oops,或者像这样的输出
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
这表明堆从非零地址开始,因此需要上述增加的算术处理。
然而,当我尝试使用这些选项并在我的应用程序(Elastic Search)的日志目录中进行grep搜索时,我找不到这样的消息。如果有人能告诉我如何强制记录基于零或非零压缩指针的详细信息,我将非常感激。
解决方案:
很好的答案!我接受了@apangin的回答,并将他提供的Java程序包装在一个shell脚本中,只要您有Java,它就可以运行..也就是说,如果您正在查看Java堆,则应该有Java! 这是脚本:https://github.com/buildlackey/scripts/blob/master/verify_compressed_pointers_from_zero_offset.sh