有一个在 Windows 机器上运行的 Java 库需要记录有关操作系统的信息,例如 CPU 负载、JVM 占用的内存等。我很确定 Java 本身无法获取这些信息,因为它是特定于操作系统的。
此库的日志中需要此信息,以便向客户指出某些操作因库无法获得足够的资源而失败。
无法选择 JVM,即我们不能要求我们的客户应使用实现 Windows 操作系统特定功能的特定 JVM。
是否有可以通过 JNI 使用的 Windows 库 (DLL) 或 API?
我们也可以自己用 C++ 或 C# 实现 DLL,我需要在哪里查看如何最有效地完成此操作?
编辑:我需要访问有关 JVM 本身进程的数据,我猜我只能通过 native Windows API 获得这些数据。所以我想我必须实现一个小的 C 程序并通过 JNI 将其链接为 native DLL。有什么建议吗?
最佳答案
内存部分,看Runtime的几个内存相关的方法. 要获取占用的内存,请尝试以下操作:
Runtime runtime = Runtime.getRuntime();
System.out.println(runtime.totalMemory() - runtime.freeMemory());
我还没有尝试过,但是对于 CPU 负载,请查看 following .
getSystemLoadAverage()
方法应该可以做到这一点。
希望这对您有所帮助!
关于c# - Windows 上的 Java 需要记录 CPU 负载和类似的操作系统特定性能信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7845859/