- 0
- 0
- 约4.75千字
- 约 6页
- 2024-04-03 发布于上海
- 举报
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的毫秒数。
publicstaticnativelonggetProcessCPUTime();
使用JDK内置的javah工具产生将来本地代码实现使用的C头。
JNIEXPORTjlongJNICALL
Java_com_vladium_utils_SystemInformation_getProcessCPUTime(JNIEnv*env,jclasscls)
二、本地方法实现
在大多数的Win32平台上,该方法可以使用GetProcessTimes()系统调用实现,差不多仅需要3行代码就可以了:
JNIEXPORTjlongJNICALL
Java_com_vladium_utils_SystemInformation_getProcessCPUTime(JNIEnv*
env,jclasscls)
{
FILETIMEcreationTime,exitTime,kernelTime,userTime;
GetProcessTimes(s_currentProcess,creationTime,exitTime,kernelTime,
userTime);
return(jlong)((fileTimeToInt64(kernelTime)+fileTimeToInt64(userTime))
/
(s_numberOfProcessors*10000));
}
该方法首先累加用于执行当前进程的核心和用户代码耗费的时间,除以处理器的数目,并把结果转换到毫秒。fileTimeToInt64()是一个辅助函数,用于把FILETIME结构的数据转换为64位的整数。s_currentProcess和s_numberOfProcessors是全局变量,当JVM装载本地库时即初始化。
staticHANDLEs_currentProcess;staticints_numberOfProcessors;
JNIEXPORTjintJNICALL
JNI_OnLoad(JavaVM*vm,void*reserved)
{
SYSTEM_INFOsystemInfo;s_currentProcess=GetCurrentProcess();
GetSystemInfo(systemInfo);
s_numberOfProcessors=systemInfo.dwNumberOfProcessors;
returnJNI_VERSION_1_2;
}
注意,如果你在UNIX平台上实现getProcessCPUTime(),你应该以getrusage
系统调用开始。三、调用本地方法
回到Java中,在SystemInformation类中,装载本地库(silib.dllonWin32)最
好通过静态初始化代码块完成。
privatestaticfinalStringSILIB=silib;static
{
try
{
System.loadLibrary(SILIB);
}
catch(UnsatisfiedLinkErrore)
{
System.out.println(nativelib+SILIB+notfoundinjava.library.path:
+System.getProperty(java.library.path));
throwe;//re-thr
您可能关注的文档
- ID排版打印分析和总结.docx
- IF YOU 韩语歌词分析和总结.docx
- If You 中文、音译歌词对照.docx
- IKEA公司的营销策略.docx
- ikerde制氧机分析和总结.docx
- IMD Flow工艺流程分析和总结.docx
- IMD工艺塑料 IMD的选用IMD.docx
- IMD技术分析和总结.docx
- IMD注塑工艺分析和总结.docx
- IML工艺概述分析和总结.docx
- 工业机器人概论.pdf
- 工业机器人工业机器人试卷(练习题库)(2023版).pdf
- CN210713535U 一种灌浆套筒钢筋连接件样品制作的辅助装置 (中建科技(福州)有限公司).pdf
- 2023-2024学年深圳市高级中学高一(下)期中英语试卷.pdf
- 2023-2024学年深圳市高级中学高一(下)期中英语试卷答案.pdf
- CN210730895U 一种用于制作铸模所需成型蜡的挂蜡摇匀装置 (湖南观互文化艺术发展有限公司).pdf
- 2024年三峡大学辅导员招聘考试真题汇编附答案.docx
- Unit 1 Meeting new people第4课时 B Let’s talk & Choose and say课件2026人教版英语四年级下册.pptx
- 2024-2026新疆水发电力能源集团有限公司高校毕业生招聘90人笔试历年题库及答案解析(夺冠).docx
- CN210772921U 一种改良型冰球制作模具 (廊坊市福泰文体用品有限公司).pdf
原创力文档

文档评论(0)