有一个运行在windows机器上的Java库需要记录有关操作系统的信息,如CPU负载,JVM占用的内存等,我很确定Java本身无法获得,因为它是特定于操作系统的。
此信息需要在此库的日志中,以便向客户端指出由于库无法获得足够的资源而导致某些操作失败。
选择JVM是不可能的,也就是说,我们不能要求我们的客户端应该使用实现windows操作系统特定功能的特定JVM。
是否有一个可以通过JNI使用的windows库(DLL)或API ?
我们也可以在c++或c#中实现DLL,我需要在哪里查看如何最有效地完成?
编辑:我需要访问有关JVM本身进程的数据,我想我只能通过本机Windows API获得。所以我想我必须实现一个小的C程序,并通过JNI将其链接为本机DLL。有什么建议吗?
对于内存部分,请查看运行时的几个与内存相关的方法。要获取已占用的内存,请尝试以下操作:
Runtime runtime = Runtime.getRuntime();
System.out.println(runtime.totalMemory() - runtime.freeMemory());
我还没有尝试过,但是对于CPU负载,请查看以下内容。应该由getSystemLoadAverage()
方法来完成。
希望这对你有帮助!
如果java.lang. net不能满足您的需求。运行时,你可以走JNI路线,设计一个Java API来提供你所需要的。
我不知道任何开箱即用的dll,你可以包装(与JNI),但你所追求的数据是在注册表中所谓的"性能计数器"。在linux上,你可以从/proc中读取数据。
有关性能计数器的更多信息,请参阅MSDN网站。