如何获得我的程序(java)有效使用的cpu时间?

时间:2015-07-27 04:09:52

标签: java

我正在使用java中的代码,我必须发送到外部计算机才能运行。到目前为止,在我的计算机中,我正在使用此功能来了解时间(实时到现在已足够)

     long start;
     long end;
    start = System.currentTimeMillis();
    //
    %code
    //
    end   = System.currentTimeMillis();
    time=(float) ((end - start)/1000.);

但后来我意识到,计算机分配了用户之间消耗的cpu时间,因此执行时间被“暂停”几秒钟,直到再次运行,因此我得到的时间不准确。并根据Recording Program's CPU Time的答案实现了这个例子:

    try {

       ThreadMXBean thread = ManagementFactory.getThreadMXBean();

       long cpu = thread.getCurrentThreadCpuTime();
       long user= thread.getCurrentThreadUserTime() ;
       Thread.sleep(300);
       int i=0;
       while(i<100000){
           System.out.println("hola");
           i++;
       }
       cpu =( thread.getCurrentThreadCpuTime() - cpu ) ;
       user=( thread.getCurrentThreadUserTime() -user );
       System.out.println("Cpu:"+cpu);
       System.out.println("User:"+user);
   }
   catch (InterruptedException _) {}

例如我得到了这些结果:

Cpu:1218750000&gt;用户:593750000

Cpu:1453125000&gt;用户:750000000

是thread.getCurrentThreadUserTime()我需要的功能吗?

1 个答案:

答案 0 :(得分:0)

我从未使用过这个ThreadMXBean,虽然它有时在过去很有用:)

无论如何,JavaDoc告诉

  

long getCurrentThreadUserTime()

     

以纳秒为单位返回当前线程在用户模式下执行的CPU时间。返回值的精度为纳秒,但不一定是纳秒精度。   这是一种方便的本地管理方法,相当于调用:

     

getThreadUserTime(Thread.currentThread()的getId());

     

返回:   如果启用了CPU时间测量,则当前线程的用户级CPU时间;否则为-1。   抛出:   UnsupportedOperationException - 如果Java虚拟机不支持当前线程的CPU时间测量。   也可以看看:   getCurrentThreadCpuTime(),isCurrentThreadCpuTimeSupported(),isThreadCpuTimeEnabled(),setThreadCpuTimeEnabled(boolean)

所以你所做的似乎是正确的。您可能会问自己为什么数字如此之高,它们以纳秒返回。