如何测量 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)
我写了一个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)