有一个运行在windows机器上的Java库,它需要记录关于操作系统的信息,比如CPU负载,JVM占用的内存等,我非常确定Java本身无法获得这些信息,因为它是特定于操作系统的。
此库的日志中需要此信息,以便向客户端指出某些操作因库无法获取足够的资源而失败。
选择JVM是不可能的,也就是说,我们不能要求我们的客户端必须使用实现windows操作系统特定功能的特定JVM。
有没有可以通过JNI使用的windows库(DLL)或API?
我们也可以自己在C++或C#中实现动态链接库,我需要在哪里查看如何才能最有效地实现这一点?
编辑:我需要访问有关JVM本身进程的数据,我想我只能通过本地Windows API获得这些数据。因此,我想我必须实现一个小的C程序,并通过JNI将其链接为本机DLL。对此有什么建议吗?
发布于 2011-10-21 14:52:30
对于内存部分,请看Runtime的几个与内存相关的方法。要获取占用的内存,请尝试执行以下操作:
Runtime runtime = Runtime.getRuntime();
System.out.println(runtime.totalMemory() - runtime.freeMemory());
我还没有尝试过,但是对于CPU负载,可以看看following。getSystemLoadAverage()
方法应该可以做到这一点。
希望这能有所帮助!
发布于 2011-10-22 00:38:41
如果java.lang.Runtime不能满足您的需求,您可以走JNI路线,设计一个Java API来提供您所需的内容。
我不知道您可以(用JNI)包装的任何开箱即用的DLL,但是您需要的数据是在注册表中,即所谓的“性能计数器”。在linux上,你可以从/proc中读取数据。
有关Performance Counters的更多信息,请参阅MSDN站点。
https://stackoverflow.com/questions/7845859
复制相似问题