- 浏览: 247558 次
- 性别:
- 来自: Shanghai
文章分类
最新评论
-
a790851624:
本人刚到公司,接到一个任务:在java代码中集成kettle的 ...
java应用程序中集成Kettle -
obnijeh:
谢谢共享,正需要。
Kettle 简介及Kettle用户操作手册 -
zhaokui:
很好,很好
Java中SimpleDateFormat用法详解——获得常用时间表示法(二) -
zhaokui:
,不错,不错
Java中SimpleDateFormat用法详解(一) -
babaoqi:
学习下,O(∩_∩)O谢谢了
Kettle 简介及Kettle用户操作手册
最近做个项目,就是要取得cpu占有率等等的系统信息,一开始以为要用动态链接库了,但后来发现可以像下面这样做,不去调用jni,这样省去了很多看新技术的时间o(∩_∩)o...
在Java中,可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息,下面例子可以取得这些信息,并且获得在Windows下的内存使用率。
首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下:
- package com.amgkaka.performance;
- /** *//**
- * 监视信息的JavaBean类.
- * @author amg
- * @version 1.0
- * Creation date: 2008-4-25 - 上午10:37:00
- */
- public class MonitorInfoBean {
- /** *//** 可使用内存. */
- private long totalMemory;
- /** *//** 剩余内存. */
- private long freeMemory;
- /** *//** 最大可使用内存. */
- private long maxMemory;
- /** *//** 操作系统. */
- private String osName;
- /** *//** 总的物理内存. */
- private long totalMemorySize;
- /** *//** 剩余的物理内存. */
- private long freePhysicalMemorySize;
- /** *//** 已使用的物理内存. */
- private long usedMemory;
- /** *//** 线程总数. */
- private int totalThread;
- /** *//** cpu使用率. */
- private double cpuRatio;
- public long getFreeMemory() {
- return freeMemory;
- }
- public void setFreeMemory(long freeMemory) {
- this.freeMemory = freeMemory;
- }
- public long getFreePhysicalMemorySize() {
- return freePhysicalMemorySize;
- }
- public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {
- this.freePhysicalMemorySize = freePhysicalMemorySize;
- }
- public long getMaxMemory() {
- return maxMemory;
- }
- public void setMaxMemory(long maxMemory) {
- this.maxMemory = maxMemory;
- }
- public String getOsName() {
- return osName;
- }
- public void setOsName(String osName) {
- this.osName = osName;
- }
- public long getTotalMemory() {
- return totalMemory;
- }
- public void setTotalMemory(long totalMemory) {
- this.totalMemory = totalMemory;
- }
- public long getTotalMemorySize() {
- return totalMemorySize;
- }
- public void setTotalMemorySize(long totalMemorySize) {
- this.totalMemorySize = totalMemorySize;
- }
- public int getTotalThread() {
- return totalThread;
- }
- public void setTotalThread(int totalThread) {
- this.totalThread = totalThread;
- }
- public long getUsedMemory() {
- return usedMemory;
- }
- public void setUsedMemory(long usedMemory) {
- this.usedMemory = usedMemory;
- }
- public double getCpuRatio() {
- return cpuRatio;
- }
- public void setCpuRatio(double cpuRatio) {
- this.cpuRatio = cpuRatio;
- }
- }
package com.amgkaka.performance; /** *//** * 监视信息的JavaBean类. * @author amg * @version 1.0 * Creation date: 2008-4-25 - 上午10:37:00 */ public class MonitorInfoBean { /** *//** 可使用内存. */ private long totalMemory; /** *//** 剩余内存. */ private long freeMemory; /** *//** 最大可使用内存. */ private long maxMemory; /** *//** 操作系统. */ private String osName; /** *//** 总的物理内存. */ private long totalMemorySize; /** *//** 剩余的物理内存. */ private long freePhysicalMemorySize; /** *//** 已使用的物理内存. */ private long usedMemory; /** *//** 线程总数. */ private int totalThread; /** *//** cpu使用率. */ private double cpuRatio; public long getFreeMemory() { return freeMemory; } public void setFreeMemory(long freeMemory) { this.freeMemory = freeMemory; } public long getFreePhysicalMemorySize() { return freePhysicalMemorySize; } public void setFreePhysicalMemorySize(long freePhysicalMemorySize) { this.freePhysicalMemorySize = freePhysicalMemorySize; } public long getMaxMemory() { return maxMemory; } public void setMaxMemory(long maxMemory) { this.maxMemory = maxMemory; } public String getOsName() { return osName; } public void setOsName(String osName) { this.osName = osName; } public long getTotalMemory() { return totalMemory; } public void setTotalMemory(long totalMemory) { this.totalMemory = totalMemory; } public long getTotalMemorySize() { return totalMemorySize; } public void setTotalMemorySize(long totalMemorySize) { this.totalMemorySize = totalMemorySize; } public int getTotalThread() { return totalThread; } public void setTotalThread(int totalThread) { this.totalThread = totalThread; } public long getUsedMemory() { return usedMemory; } public void setUsedMemory(long usedMemory) { this.usedMemory = usedMemory; } public double getCpuRatio() { return cpuRatio; } public void setCpuRatio(double cpuRatio) { this.cpuRatio = cpuRatio; } }
接着编写一个获得当前的监控信息的接口,该类的代码如下所示:
- package com.amgkaka.performance;
- /** *//**
- * 获取系统信息的业务逻辑类接口.
- * @author amg * @version 1.0
- * Creation date: 2008-3-11 - 上午10:06:06
- */
- public interface IMonitorService {
- /** *//**
- * 获得当前的监控对象.
- * @return 返回构造好的监控对象
- * @throws Exception
- * @author amgkaka
- * Creation date: 2008-4-25 - 上午10:45:08
- */
- public MonitorInfoBean getMonitorInfoBean() throws Exception;
- }
package com.amgkaka.performance; /** *//** * 获取系统信息的业务逻辑类接口. * @author amg * @version 1.0 * Creation date: 2008-3-11 - 上午10:06:06 */ public interface IMonitorService { /** *//** * 获得当前的监控对象. * @return 返回构造好的监控对象 * @throws Exception * @author amgkaka * Creation date: 2008-4-25 - 上午10:45:08 */ public MonitorInfoBean getMonitorInfoBean() throws Exception; }
该类的实现类MonitorServiceImpl如下所示:
- package com.amgkaka.performance;
- import java.io.InputStreamReader;
- import java.io.LineNumberReader;
- import sun.management.ManagementFactory;
- import com.sun.management.OperatingSystemMXBean;
- /** *//**
- * 获取系统信息的业务逻辑实现类.
- * @author amg * @version 1.0 Creation date: 2008-3-11 - 上午10:06:06
- */
- public class MonitorServiceImpl implements IMonitorService {
- //可以设置长些,防止读到运行此次系统检查时的cpu占用率,就不准了
- private static final int CPUTIME = 5000;
- private static final int PERCENT = 100;
- private static final int FAULTLENGTH = 10;
- /** *//**
- * 获得当前的监控对象.
- * @return 返回构造好的监控对象
- * @throws Exception
- * @author amg * Creation date: 2008-4-25 - 上午10:45:08
- */
- public MonitorInfoBean getMonitorInfoBean() throws Exception {
- int kb = 1024;
- // 可使用内存
- long totalMemory = Runtime.getRuntime().totalMemory() / kb;
- // 剩余内存
- long freeMemory = Runtime.getRuntime().freeMemory() / kb;
- // 最大可使用内存
- long maxMemory = Runtime.getRuntime().maxMemory() / kb;
- OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory
- .getOperatingSystemMXBean();
- // 操作系统
- String osName = System.getProperty("os.name");
- // 总的物理内存
- long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;
- // 剩余的物理内存
- long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;
- // 已使用的物理内存
- long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb
- .getFreePhysicalMemorySize())
- / kb;
- // 获得线程总数
- ThreadGroup parentThread;
- for (parentThread = Thread.currentThread().getThreadGroup(); parentThread
- .getParent() != null; parentThread = parentThread.getParent())
- ;
- int totalThread = parentThread.activeCount();
- double cpuRatio = 0;
- if (osName.toLowerCase().startsWith("windows")) {
- cpuRatio = this.getCpuRatioForWindows();
- }
- // 构造返回对象
- MonitorInfoBean infoBean = new MonitorInfoBean();
- infoBean.setFreeMemory(freeMemory);
- infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);
- infoBean.setMaxMemory(maxMemory);
- infoBean.setOsName(osName);
- infoBean.setTotalMemory(totalMemory);
- infoBean.setTotalMemorySize(totalMemorySize);
- infoBean.setTotalThread(totalThread);
- infoBean.setUsedMemory(usedMemory);
- infoBean.setCpuRatio(cpuRatio);
- return infoBean;
- }
- /** *//**
- * 获得CPU使用率.
- * @return 返回cpu使用率
- * @author amg * Creation date: 2008-4-25 - 下午06:05:11
- */
- private double getCpuRatioForWindows() {
- try {
- String procCmd = System.getenv("windir")
- + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,"
- + "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
- // 取进程信息
- long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
- Thread.sleep(CPUTIME);
- long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
- if (c0 != null && c1 != null) {
- long idletime = c1[0] - c0[0];
- long busytime = c1[1] - c0[1];
- return Double.valueOf(
- PERCENT * (busytime) / (busytime + idletime))
- .doubleValue();
- } else {
- return 0.0;
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- return 0.0;
- }
- }
- /** *//**
- * 读取CPU信息.
- * @param proc
- * @return
- * @author amg * Creation date: 2008-4-25 - 下午06:10:14
- */
- private long[] readCpu(final Process proc) {
- long[] retn = new long[2];
- try {
- proc.getOutputStream().close();
- InputStreamReader ir = new InputStreamReader(proc.getInputStream());
- LineNumberReader input = new LineNumberReader(ir);
- String line = input.readLine();
- if (line == null || line.length() < FAULTLENGTH) {
- return null;
- }
- int capidx = line.indexOf("Caption");
- int cmdidx = line.indexOf("CommandLine");
- int rocidx = line.indexOf("ReadOperationCount");
- int umtidx = line.indexOf("UserModeTime");
- int kmtidx = line.indexOf("KernelModeTime");
- int wocidx = line.indexOf("WriteOperationCount");
- long idletime = 0;
- long kneltime = 0;
- long usertime = 0;
- while ((line = input.readLine()) != null) {
- if (line.length() < wocidx) {
- continue;
- }
- // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount,
- // ThreadCount,UserModeTime,WriteOperation
- String caption = Bytes.substring(line, capidx, cmdidx - 1)
- .trim();
- String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();
- if (cmd.indexOf("wmic.exe") >= 0) {
- continue;
- }
- // log.info("line="+line);
- if (caption.equals("System Idle Process")
- || caption.equals("System")) {
- idletime += Long.valueOf(
- Bytes.substring(line, kmtidx, rocidx - 1).trim())
- .longValue();
- idletime += Long.valueOf(
- Bytes.substring(line, umtidx, wocidx - 1).trim())
- .longValue();
- continue;
- }
- kneltime += Long.valueOf(
- Bytes.substring(line, kmtidx, rocidx - 1).trim())
- .longValue();
- usertime += Long.valueOf(
- Bytes.substring(line, umtidx, wocidx - 1).trim())
- .longValue();
- }
- retn[0] = idletime;
- retn[1] = kneltime + usertime;
- return retn;
- } catch (Exception ex) {
- ex.printStackTrace();
- } finally {
- try {
- proc.getInputStream().close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return null;
- }
- /** *//**
- * 测试方法.
- * @param args
- * @throws Exception
- * @author amg * Creation date: 2008-4-30 - 下午04:47:29
- */
- public static void main(String[] args) throws Exception {
- IMonitorService service = new MonitorServiceImpl();
- MonitorInfoBean monitorInfo = service.getMonitorInfoBean();
- System.out.println("cpu占有率=" + monitorInfo.getCpuRatio());
- System.out.println("可使用内存=" + monitorInfo.getTotalMemory());
- System.out.println("剩余内存=" + monitorInfo.getFreeMemory());
- System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory());
- System.out.println("操作系统=" + monitorInfo.getOsName());
- System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb");
- System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb");
- System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb");
- System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb");
- }
- }
package com.amgkaka.performance; import java.io.InputStreamReader; import java.io.LineNumberReader; import sun.management.ManagementFactory; import com.sun.management.OperatingSystemMXBean; /** *//** * 获取系统信息的业务逻辑实现类. * @author amg * @version 1.0 Creation date: 2008-3-11 - 上午10:06:06 */ public class MonitorServiceImpl implements IMonitorService { //可以设置长些,防止读到运行此次系统检查时的cpu占用率,就不准了 private static final int CPUTIME = 5000; private static final int PERCENT = 100; private static final int FAULTLENGTH = 10; /** *//** * 获得当前的监控对象. * @return 返回构造好的监控对象 * @throws Exception * @author amg * Creation date: 2008-4-25 - 上午10:45:08 */ public MonitorInfoBean getMonitorInfoBean() throws Exception { int kb = 1024; // 可使用内存 long totalMemory = Runtime.getRuntime().totalMemory() / kb; // 剩余内存 long freeMemory = Runtime.getRuntime().freeMemory() / kb; // 最大可使用内存 long maxMemory = Runtime.getRuntime().maxMemory() / kb; OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory .getOperatingSystemMXBean(); // 操作系统 String osName = System.getProperty("os.name"); // 总的物理内存 long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb; // 剩余的物理内存 long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb; // 已使用的物理内存 long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb .getFreePhysicalMemorySize()) / kb; // 获得线程总数 ThreadGroup parentThread; for (parentThread = Thread.currentThread().getThreadGroup(); parentThread .getParent() != null; parentThread = parentThread.getParent()) ; int totalThread = parentThread.activeCount(); double cpuRatio = 0; if (osName.toLowerCase().startsWith("windows")) { cpuRatio = this.getCpuRatioForWindows(); } // 构造返回对象 MonitorInfoBean infoBean = new MonitorInfoBean(); infoBean.setFreeMemory(freeMemory); infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize); infoBean.setMaxMemory(maxMemory); infoBean.setOsName(osName); infoBean.setTotalMemory(totalMemory); infoBean.setTotalMemorySize(totalMemorySize); infoBean.setTotalThread(totalThread); infoBean.setUsedMemory(usedMemory); infoBean.setCpuRatio(cpuRatio); return infoBean; } /** *//** * 获得CPU使用率. * @return 返回cpu使用率 * @author amg * Creation date: 2008-4-25 - 下午06:05:11 */ private double getCpuRatioForWindows() { try { String procCmd = System.getenv("windir") + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine," + "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount"; // 取进程信息 long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd)); Thread.sleep(CPUTIME); long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd)); if (c0 != null && c1 != null) { long idletime = c1[0] - c0[0]; long busytime = c1[1] - c0[1]; return Double.valueOf( PERCENT * (busytime) / (busytime + idletime)) .doubleValue(); } else { return 0.0; } } catch (Exception ex) { ex.printStackTrace(); return 0.0; } } /** *//** * 读取CPU信息. * @param proc * @return * @author amg * Creation date: 2008-4-25 - 下午06:10:14 */ private long[] readCpu(final Process proc) { long[] retn = new long[2]; try { proc.getOutputStream().close(); InputStreamReader ir = new InputStreamReader(proc.getInputStream()); LineNumberReader input = new LineNumberReader(ir); String line = input.readLine(); if (line == null || line.length() < FAULTLENGTH) { return null; } int capidx = line.indexOf("Caption"); int cmdidx = line.indexOf("CommandLine"); int rocidx = line.indexOf("ReadOperationCount"); int umtidx = line.indexOf("UserModeTime"); int kmtidx = line.indexOf("KernelModeTime"); int wocidx = line.indexOf("WriteOperationCount"); long idletime = 0; long kneltime = 0; long usertime = 0; while ((line = input.readLine()) != null) { if (line.length() < wocidx) { continue; } // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperation String caption = Bytes.substring(line, capidx, cmdidx - 1) .trim(); String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim(); if (cmd.indexOf("wmic.exe") >= 0) { continue; } // log.info("line="+line); if (caption.equals("System Idle Process") || caption.equals("System")) { idletime += Long.valueOf( Bytes.substring(line, kmtidx, rocidx - 1).trim()) .longValue(); idletime += Long.valueOf( Bytes.substring(line, umtidx, wocidx - 1).trim()) .longValue(); continue; } kneltime += Long.valueOf( Bytes.substring(line, kmtidx, rocidx - 1).trim()) .longValue(); usertime += Long.valueOf( Bytes.substring(line, umtidx, wocidx - 1).trim()) .longValue(); } retn[0] = idletime; retn[1] = kneltime + usertime; return retn; } catch (Exception ex) { ex.printStackTrace(); } finally { try { proc.getInputStream().close(); } catch (Exception e) { e.printStackTrace(); } } return null; } /** *//** * 测试方法. * @param args * @throws Exception * @author amg * Creation date: 2008-4-30 - 下午04:47:29 */ public static void main(String[] args) throws Exception { IMonitorService service = new MonitorServiceImpl(); MonitorInfoBean monitorInfo = service.getMonitorInfoBean(); System.out.println("cpu占有率=" + monitorInfo.getCpuRatio()); System.out.println("可使用内存=" + monitorInfo.getTotalMemory()); System.out.println("剩余内存=" + monitorInfo.getFreeMemory()); System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory()); System.out.println("操作系统=" + monitorInfo.getOsName()); System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb"); System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb"); System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb"); System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb"); } }
该实现类中需要用到一个自己编写byte的工具类,该类的代码如下所示:
- package com.amgkaka.performance;
- /** *//**
- * byte操作类.
- * @author amg * @version 1.0
- * Creation date: 2008-4-30 - 下午04:57:23
- */
- public class Bytes {
- /** *//**
- * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在
- * 包含汉字的字符串时存在隐患,现调整如下:
- * @param src 要截取的字符串
- * @param start_idx 开始坐标(包括该坐标)
- * @param end_idx 截止坐标(包括该坐标)
- * @return
- */
- public static String substring(String src, int start_idx, int end_idx){
-
byte[] b = src.g
发表评论
-
junit4注解
2013-10-25 16:10 7591 @BeforeClass @AfterC ... -
Weblogic远程调试
2012-10-15 15:04 714配置weblogic远程调试之前,需要做这几个工作: 1 ... -
oracle恢复误删除数据,解除锁定的等sql语句
2011-11-24 10:51 1086注意:数据库版本是10g,不过大部分9i的也适用,闪回9i就没 ... -
log4j日志级别
2011-11-17 20:22 975日志记录器(Logger)是日 ... -
cookies原理
2011-11-04 11:14 940实际上,Cookie的作用就是与服务器互动。 用户登录:在很多 ... -
web.xml中<security-constraint>和四种认证类型
2011-11-01 10:04 1016<security-constraint> 的子元 ... -
Maven,ant 工具
2011-08-24 17:31 1307一:Maven,ant 工具比较 Apache ... -
java将多个文件一起打成zip包后下载实例
2011-08-24 17:23 3541//文件打包下载 pu ... -
java将文件打成zip包
2011-08-23 13:47 1888大家可能对于Zip格式的 ... -
jsp动态上传多个文件---实用的例子
2011-08-17 17:26 1216现在还有一个错误就是文件名是中文的话,就乱码。还在改进. u ... -
利用JAVA API发送E-mail
2011-08-03 16:57 897JAVA API 文档见附件 / ... -
va自动创建多层文件目录
2011-07-28 17:50 727... -
JavaMail 发送邮件例子(包括附件,及信息,及html内容的图片处理)
2011-07-07 18:36 1393public void SendMessage(Str ... -
JavaMail API 核心解说
2011-07-07 18:30 1165(javaMail APL 例子资源见 ... -
java高性能编程(转)
2011-04-06 16:12 945如何java高效編程,我在这里抛砖引玉了。希望各位大牛们能把 ... -
最常用的12种设计模式
2010-11-05 10:39 4851.策略模式(Strategy): 定 ... -
Error "JVM appears hung" in wrapper.log
2010-10-26 10:51 3530Symptoms Seeing the following ... -
Hibernate的generator属性之意义
2010-08-03 17:06 779本文讲述Hibernate的generator属性的意义。 ... -
绝妙的权限控制算法
2010-07-16 11:39 747里笔者介绍一种很常用 ... -
JConsole (在JDK6与JDK5中的区别)
2010-07-05 17:04 1280其实在 JDK 5 中已经新加 ...
相关推荐
在《Java_JNI_获得系统进程信息实例.doc》中,我们探索了一个利用Java Native Interface (JNI)来获取操作系统进程信息的示例项目。该项目由三个主要部分组成:`systemProcess.java`,`dataProcess.java`以及`process...
Java 通过JNI(Java Native Interface)接口获取当前机器硬盘ID,即序列号,是一种混合编程技术,它允许Java代码调用本地系统库,如DLL(动态链接库)来执行特定的系统级任务,这些任务在Java标准库中可能无法直接...
### Java-JNI调用动态库获取硬件信息制作软件加密 #### 一、Java-JNI调用动态库原理 Java Native Interface (JNI) 是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI最常用于实现Java环境下的...
在 Java 中,JNI 可以帮助我们获取操作系统级别的内存信息,例如总内存、已用内存和空闲内存。在 Windows 上,可以使用 `GlobalMemoryStatusEx` 函数;在 Unix 系统中,可以读取 `/proc/meminfo` 文件。 4. **网卡...
6. 异常处理:在JNI中,使用`ExceptionOccurred`检查是否发生了异常,如果有,可以用`ExceptionDescribe`打印异常信息,`ExceptionClear`清除当前的异常。 7. 类和方法ID:在C/C++中,你需要先获取类的`jclass`,...
在压缩包中的`jni获得硬盘信息.txt`文件可能包含了如何获取硬盘信息的示例,这同样可以通过JNI实现。获取硬盘使用率通常涉及到读取`/proc/diskstats`或`/sys/block`下的文件,解析其内容并计算磁盘读写速度及使用...
`/proc`是一个虚拟文件系统,它反映了当前系统的状态,包括进程信息。每个运行中的进程在`/proc`下都有一个对应的目录,例如`/proc/1234`代表进程ID为1234的进程。你可以读取`/proc/[pid]/stat`文件获取进程状态,...
本地代码可以通过`ExceptionOccurred`检查是否有Java异常发生,使用`ExceptionDescribe`打印异常信息,`ExceptionClear`清除当前的异常。 8. **线程支持** JNI支持多线程编程,每个Java线程都有一个对应的本地线程...
在Java编程中,获取系统资源的信息是常见...总的来说,Java虽然不能直接提供获取所有系统资源的通用方法,但通过标准库和其他辅助工具,我们可以获取到CPU、内存和硬盘等关键信息,为系统监控和性能优化提供数据支持。
例如,使用`System.getProperty("os.name")`获取当前操作系统的名称,然后根据名称创建并实例化对应的硬件信息提供者。 总结起来,Java通过多种方式可以读取Windows、Linux和Mac OS的硬件信息,包括JNI、shell命令...
总结来说,获取当前系统所有进程可以通过Java直接调用操作系统命令或者使用JNI调用本地代码实现。前者简单且跨平台,但可能受到操作系统命令行工具的限制;后者更灵活,可以直接操作底层系统,但需要编写和管理本地...
"Java 读取任务管理器信息" 本文主要讨论了如何在 Java 中读取任务管理器信息,包括物理内存、剩余物理内存、已使用...java 中读取任务管理器信息可以帮助开发者更好地了解系统的当前状态,提高系统的性能和可维护性。
通过上述步骤,我们可以使用Java有效地获取和管理USB外接设备的信息。在实际项目中,可能需要根据具体需求对这些基础操作进行封装和扩展,例如创建一个设备管理器类,提供更高级别的接口来处理设备的连接、断开、...
在Windows系统中,这个信息可以通过调用Windows API函数获取。Java本身并不直接支持这样的功能,因此我们需要借助JNI来实现。 首先,我们需要创建一个本地方法声明在Java类中,例如: ```java public class Cpu...
这些方法返回的信息可以帮助我们了解设备当前连接的运营商和网络环境。 接下来,关于JNI,它是Java平台用来与C/C++原生代码交互的一种机制。在某些情况下,为了提高性能或者利用硬件特性,开发者可能需要编写原生...
在上述代码中,我们创建了一个新线程`nativeThreadFunc`,并在其中使用了`AttachCurrentThread()`来获取一个新的JNI环境,然后在这个新环境中调用Java方法。这样可以确保线程安全,避免因多线程环境下直接使用`...
1. **本地方法接口**:JNI提供了一套接口,使得Java虚拟机(JVM)能够调用本地(非Java)代码,同时本地代码也能调用Java对象和方法。这些接口包括`JNIEnv`指针,它是所有本地方法接口函数的入口点。 2. **注册本地...
总结来说,Java获取浏览器代理设置是一个涉及操作系统交互的过程,可以通过JNI或第三方库来实现。`registry.jar`和`ICE_JNIRegistry.dll`的组合提供了一种可能的实现途径,即通过读取Windows注册表来获取浏览器的...
JNI在Java的发展历程中扮演了关键角色,特别是在需要高效性能、调用系统级库或者利用硬件特性时。以下是对JNI相关知识点的详细说明: 1. **JNI简介**: JNI是Java开发人员用来编写混合模式代码的接口,它可以调用...