[英]timing an operation in java
我想在Eclipse中运行我的程序,但我想看看运行该程序需要多长时间。 换句话说,我想为我的程序计时。 我知道在UNIX中,我可以通过在命令行上的命令前放置“ time”一词来计时任何操作。 但是我不知道如何在Eclipse中计时我的操作。 为了使所有内容更加清楚,我想避免编写新方法。 有什么方法可以在配置路径中添加一些内容? 有人知道我该怎么做吗?
如果您不介意添加两行代码,则可以完全在Java中执行此操作:
public class Foo {
public static void main(String[] args) {
long ms = System.currentTimeMillis();
// do whatever
System.out.println(System.currentTimeMillis() - ms);
}
}
如果需要,您也可以使用nanoTime
。
在应用程序的末尾添加system.out.println以指示其运行了多长时间。
将此类放在代码中的某个位置:
package your.package.name.common;
import org.apache.log4j.Logger;
import java.util.concurrent.TimeUnit;
public class CProfile {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(CProfile.class);
public static final int SECONDS_TO_ALERT = 2;
public static void slownessAlert(long startTime, String name) {
long seconds = TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
if (seconds>SECONDS_TO_ALERT){
logger.warn("slow method detected: "+name+" "+seconds+"s");
}
}
}
然后按以下方式在您的代码中使用此代码段:
public void something() {
long startTime = System.nanoTime();
//SOME HEAVY COMPUTATIONS
CProfile.slownessAlert(startTime, "something");
}
它会在发生速度缓慢时通知您(SECONDS_TO_ALERT> 2秒)。
如果它是一个Web应用程序,则将speed-tracer插件添加到eclipse中,它将帮助您找出所有时间。
确保并获得结果的一种简单方法是将以下内容添加到主类的顶部。 这段代码将节省应用程序的启动时间,然后添加JVM关闭钩子,该钩子将在JVM关闭时触发并打印持续时间。
final static long startTime = System.currentTimeMillis();
static {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
System.out.println("My program ran for "+( System.currentTimeMillis()-startTime )+" seconds.");
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.