在 Java 应用程序中使用 JNI 来监视 CPU 详解
怎样在 Java 中得到 CPU 的使用情况呢?这儿同时有一个好消息和一个坏消息。
坏消息是不能使用纯 Java 的方法得到 CPU 的使用。没有这方面的直接的 API。一 个
建议的替代方法是通过 Runtime.exec()确定 JVM 的进程 ID(PID),调用外部的、平台
相关的命令,例如 ps,然后在运行结果中解析出感 兴趣的 PID。但是,这种方法并不理想。
好消息是,可以采用一个更为可靠的方案:跳出 Java,写几行 C 代码,然后通过 JNI
进行整合。下面我将向你展示编写一个 Win32 平台的简单的 JNI 库是多么简单。
一般来说,JNI 有点复杂。但是,如果你仅仅单向调用--从 Java 调用本地代码,并且
仅使用基本型进行通讯--事情还是很简单的。有许多 JNI 方面的学习资料,所以这儿就不介
绍 JNI 的基础了。仅介绍实现步骤。
一、在 Java 中声明 JNI 方法
开始,创建一个声明了本地方法的类 com.vladium.utils.SystemInformation,该
方法返回当前进程已使用的 CPU 的毫秒数。
public staticnative long getProcessCPUTime();
使用 JDK 内置的 javah 工具产生将来本地代码实现使用的 C 头。
JNIEXPORT jlong JNICALL
Java_com_vladium_utils_SystemInformation_getProcessCPUTime (JNIEnv *
env, jclass cls)
二、本地方法实现
在大多数的 Win32 平台上,该方法可以使用 GetProcessTimes()系统调用实现,差
不多仅需要 3 行代码就可以了:
JNIEXPORT jlong JNICALL
Java_com_vladium_utils_SystemInformation_getProcessCPUTime
(JNIEnv * env, jclass cls)
{
FILETIME creationTime, exitTime, kernelTime, userTime;
GetProcessTimes (s_currentProcess, & creationTime, &
exitTime, & kernelTime,
& userTime);
评论0
最新资源