ceekay_ 2016-05-26 06:42 采纳率: 16.7%
浏览 3356

JAVA 得到本进程的CPU占用率

各位大神们!现在可以得到CPU总体的占用率,但是我想得到本进程的CPU占用率是多少,怎么实现?

  • 写回答

1条回答 默认 最新

  • 护士leo 2016-05-26 07:12
    关注

    先说内存占用量:一般说来,你可以使用这两种方式获取内存使用情况
    方式一:
    MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
    MemoryUsage memoryUsage = memoryMXBean.getHeapMemoryUsage(); //椎内存使用情况
    long totalMemorySize = memoryUsage.getInit(); //初始的总内存
    long maxMemorySize = memoryUsage.getMax(); //最大可用内存
    long usedMemorySize = memoryUsage.getUsed(); //已使用的内存

    方式二:
    Runtime rt = Runtime.getRuntime();
    long totalMemorySize = rt.totalMemory(); //初始的总内存
    long maxMemorySiz = t.maxMemory(); //最大可用内存
    long freeMemorySize = rt.freeMemory(); //当前可用内存

    需要说明的是,这种方式获取的是整个jvm的内存使用情况,并不是某一个进程的内存使用情况,事实上,在java内部,可以使用Rumtime.getRuntime().exec(${SHELL})来开启一个外部进程(这里${SHELL}代表一个可操作系统的shell命令)。而运行Java程序整个jvm,对于操作系统而言,也仅仅只是一个进程。也就是说,一个jvm就是一个进程,你通过java程序开启的进程都是外部进程,java内部目前还提供了一个destroy方法来销毁该进程,对于该进程的其它信息,都无法直接获取,这些信息的获取,显然需要本地化(Local)的实现。既然标准jdk库没有,就不可能再通过平台无关的代码来实现了。典型的做法就是使用前面第一种情况的方式,再启一个进程,执行shell命令来获取。

    不过对于cpu使用时间,采用标准java代码倒是可以拿到。由于java的语法很啰嗦,举一个较完全的例子需要太多的代码,我这里就只写最关键的代码:
    ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
    ① long currentCpuTime = threadMXBean.getCurrentThreadCpuTime(); //当前线程的cpu使用时间
    long someThreadId = 709817L; //假定有某个线程的ID是709817
    ② long someThreadCpuTime = threadMXBean.getThreadCpuTime(someThreadId); //获取ID为someThreadId即709817的线程的cpu时间

    基于上面的核心api,你可以把由java启动的外部进程放到一个单独的线程中执行,再用代码②的方式来获取该进程的cpu使用时间,也可以将外部进程放入到当前线程中执行,用① 的方式来获得进程的cpu使用时间。

    评论

报告相同问题?

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决