3

在 Windows 机器上运行的 Java 库需要记录有关操作系统的信息,例如 CPU 负载、JVM 占用的内存等。我很确定 Java 本身无法获得这些信息,因为它是特定于操作系统的。

此库的日志中需要此信息,以便向客户端指出某些操作因库无法获得足够的资源而失败。

无法选择 JVM,即我们不能要求我们的客户应该使用实现 Windows 操作系统特定功能的特定 JVM。

是否有可以通过 JNI 使用的 Windows 库 (DLL) 或 API?

我们也可以自己在 C++ 或 C# 中实现一个 DLL,我需要在哪里查看如何最有效地完成此操作?

编辑:我需要访问有关 JVM 本身进程的数据,我猜我只能通过本机 Windows API 获得这些数据。所以我想我必须实现一个小的 C 程序并通过 JNI 将它链接为本地 DLL。有什么建议吗?

4

2 回答 2

5

对于内存部分,看一下Runtime的几个内存相关的方法。要获取占用的内存,请尝试以下操作:

Runtime runtime = Runtime.getRuntime();
System.out.println(runtime.totalMemory() - runtime.freeMemory());

我还没有尝试过,但是对于 CPU 负载,请查看以下内容。该getSystemLoadAverage()方法应该做到这一点。

希望这可以帮助!

于 2011-10-21T06:52:30.303 回答
1

如果 java.lang.Runtime 不能满足您的需求,您可以走 JNI 路线并设计一个 Java API 来提供您所需要的。

我不知道您可以包装(使用 JNI)的任何开箱即用的 DLL,但您所追求的数据在注册表中作为所谓的“性能计数器”。在 linux 上,您可以从 /proc 读取数据。

有关性能计数器的更多信息,请参阅 MSDN 站点。

于 2011-10-21T16:38:41.283 回答