【问题标题】:How to measure the actual running time of java process?如何测量java进程的实际运行时间?
【发布时间】:2016-08-29 21:07:35
【问题描述】:

我写了一个java程序,可以编译,执行别人提交的代码(cpp,java)。我正在使用 java 的进程类来执行此操作。进程类调用g++java compiler。出于某种目的,我需要知道该进程的实际执行时间或执行该代码需要多少时间。

process.waitFor(2000, TimeUnit.MILLISECONDS)

这个过程正在等待 2000 毫秒,但是如果这个过程在 2000 毫秒内完成,我怎么知道这个过程需要多少时间?

======更新===== 我目前这样做是一种旧方式。

StopWatch.Start();
process.waitFor(dto.getTimeLimit(), TimeUnit.MILLISECONDS)
long timeEplased = StopWatch.Stop();

StopWatch 是我的书面课程,使用System.nanoTime() 计算经过的时间。

【问题讨论】:

  • 您可以使用like this 或使用现有工具,如this one
  • @alfasin 真的吗?我目前正在这样做。有没有更聪明的方法?我将更新我的问题,即我现在正在做什么。
  • “真的吗?” - 是的。这是一项简单的任务,通过使其“更智能”,您肯定会以过于复杂的实现结束。保持简单的芽。
  • @alfasin 我正在寻找一种可以提供精确度的方法。 :) 使用 Process 类必须有一些开销。
  • 嘿嘿..好点。顺便说一句谢谢。 :)

标签: java time process


【解决方案1】:

这样做应该就足够了:

    long before = System.nanoTime();

    process.waitFor();

    long durationMs = (System.nanoTime() - before)/1_000_000;

只要您的线程没有中断并且任务停止。您也可以在新线程中启动它,并在超出时间限制时中断它。

不幸的是,我认为没有专门针对该任务的专用接口-可能是因为进程运行时间的概念可以在不同操作系统之间进行(您对处理器时间,用户空间时间,内核空间时间,单调感兴趣吗?时钟时间?这些都必须处理,这只是一个泛型 *NIX)

【讨论】:

  • 我目前正在这样做。我以为还有其他方法。 ://
  • @seal - 不幸的是,我认为没有专门针对该任务的界面。可能是因为进程运行时间的概念可以在不同的操作系统之间非常不同(你对处理器时间、用户空间时间、内核空间时间、单调时间感兴趣吗?这些都必须处理,这只是一个泛型 *NIX)
  • 我认为您应该将之前的评论添加到您的答案中。 :)
  • @seal:我已将其添加到答案中。
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2015-01-06
相关资源
最近更新 更多