gpt4 book ai didi

java - 请问我当前的jdk中是否压缩了普通对象指针

转载 作者:行者123 更新时间:2023-12-02 11:23:43 26 4
gpt4 key购买 nike

我当前正在运行以下版本的jdk:

openjdk version "1.8.0_144"
OpenJDK Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

有没有办法验证这个jdk是否支持oop压缩?我仍在学习中,所以如果这听起来很基础,请原谅。

最佳答案

您可以使用 JVM 输出(通过 -XX:+PrintFlagsFinal)来检查 oop 压缩

java -Xmx32766m -XX:+PrintFlagsFinal 2> /dev/null | grep UseCompressedOops
bool UseCompressedOops := true {lp64_product}

对于大于 32767m 的堆,JVM 禁用压缩 oop:

java -Xmx32767m -XX:+PrintFlagsFinal 2> /dev/null | grep UseCompressedOops
bool UseCompressedOops = false {lp64_product}

另一个选项是使用诊断虚拟机选项:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

返回有关 oops 模式的详细信息:

heap address: 0x0000000082600000, size: 2010 MB, Compressed Oops mode: 32-bit
Narrow klass base: 0x0000000000000000, Narrow klass shift: 3
Compressed class space size: 1073741824 Address: 0x0000000100000000 Req Addr: 0x0000000100000000

而最高级的方法是使用 HotSpot Serviceability Agent它允许检查有关 JVM 内部的更多信息:

import sun.jvm.hotspot.runtime.VM;
import sun.jvm.hotspot.tools.Tool;

public class OopsChecker extends Tool {

@Override
public void run() {
VM vm = VM.getVM();
System.out.println("CompressedOops = " + vm.isCompressedOopsEnabled());
System.out.println("CompressedClassPointers = " + vm.isCompressedKlassPointersEnabled());
System.out.println("OOP base = 0x" + Long.toHexString(vm.getDebugger().getNarrowOopBase()));
System.out.println("OOP shift = " + vm.getDebugger().getNarrowOopShift());
}

public static void main(String[] args) {
new OopsChecker().execute(args);
}
}

您可以使用堆大小参数并检查输出。 SA 的 Java 类放置在 jdk/lib/sa-jdi.jar 中,因此您必须将此 jar 添加到您的类路径中。

关于java - 请问我当前的jdk中是否压缩了普通对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49744966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com