gpt4 book ai didi

java - 从 openjdk11 访问 com.sun.* 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:22 28 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,我想使用类 com.sun.management.ThreadMXBean 和方法 getThreadAllocatedBytes 来收集有关我的分配字节的信息应用。我对它进行了 docker 化,并在 dockerfile 中使用了 OpenJDK 11,因为 Oracle JDK 无法进行 docker 化。我正在使用 docker image jboss/base-jdk:11 并在 Wildfly 16 中部署应用程序。

很遗憾,OpenJDK 不支持 com.sun.* 包。有什么方法可以解决这个问题并在 OpenJDK 中使用 com.sun.management.ThreadMXBean.getThreadAllocatedBytes 吗?

最佳答案

所以,这对我适用于 AdoptJdk 11(它是 OpenJdk 的构建):

import java.lang.management.ManagementFactory;
import java.lang.reflect.Method;

import java.lang.management.ThreadMXBean;

public class Test {
public static void main(String[] args) {
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
try {
Method getBytes = threadMXBean.getClass().getMethod("getThreadAllocatedBytes", long.class);
getBytes.setAccessible(true);

long threadId = Thread.currentThread().getId();
long bytes = (long)getBytes.invoke(threadMXBean, threadId);
System.out.println(bytes);
} catch (Throwable e) {
System.out.println(e);
}
}
}

调用方式

C:\workspaces\devtools\jdks\adoptjdk\jdk-11.0.2+9\bin\javac Test.java
C:\workspaces\devtools\jdks\adoptjdk\jdk-11.0.2+9\bin\java --add-exports jdk.management/com.sun.management.internal=ALL-UNNAMED Test

此外,在那个 docker 镜像中它可以工作

FROM jboss/base-jdk:11
COPY . /app/
WORKDIR /app
CMD java --add-exports jdk.management/com.sun.management.internal=ALL-UNNAMED Test

然后在 docker 中运行它:

docker build -t openjdktest .
docker run -it openjdktest

编辑

哦,似乎还有更简单的选择。只需将您的 ThreadMXBean 对象直接转换为 com.sun.management.ThreadMXBean:

import java.lang.management.ManagementFactory;
import com.sun.management.ThreadMXBean;

public class Test {
public static void main(String[] args) {
ThreadMXBean threadMXBean = (ThreadMXBean)ManagementFactory.getThreadMXBean();
long bytes = threadMXBean.getThreadAllocatedBytes(Thread.currentThread().getId());
System.out.println(bytes);
}
}

这可以运行,即使没有 --add-exports JVM 参数。

关于java - 从 openjdk11 访问 com.sun.* 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55010673/

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