如何测量 java 进程的实际 运行 时间?

How to measure the actual running time of java process?

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

process.waitFor(2000, TimeUnit.MILLISECONDS)

此进程正在等待 2000 毫秒,但如果该进程在不到 2000 毫秒内完成,我怎么知道该进程需要多少时间?

======更新===== 我目前像老方法一样这样做。

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

StopWatch是我写的class,用System.nanoTime()计算经过的时间。

这样做就足够了:

    long before = System.nanoTime();

    process.waitFor();

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

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

不幸的是,我认为没有专门用于该任务的专用接口 - 可能是因为进程的概念 运行 时间在不同操作系统之间可能非常不同(您对处理器时间、用户空间感兴趣吗? time, kernelspace time, monotonous clock time? 这些都必须处理,那只是一个类属 *NIX)