繁体   English   中英

在Java中计时操作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM