正如我正在研究使用System.currentTimeinMillis()在Java中测量已用执行时间的研究如果下面显示的代码但我的查询是我们在编码时应该记住的其他性能技术除了测量之外时间,我的问题更多地集中在性能优化技术上。
public class MeasureTimeExampleJava {
public static void main(String args[]) {
//measuring elapsed time using System.nanoTime
long startTime = System.nanoTime();
for(int i=0; i< 1000000; i++){
Object obj = new Object();
}
long elapsedTime = System.nanoTime() - startTime;
System.out.println("Total execution time to create 1000K objects in Java in millis: "
+ elapsedTime/1000000);
//measuring elapsed time using Spring StopWatch
StopWatch watch = new StopWatch();
watch.start();
for(int i=0; i< 1000000; i++){
Object obj = new Object();
}
watch.stop();
System.out.println("Total execution time to create 1000K objects in Java using StopWatch in millis: "
+ watch.getTotalTimeMillis());
}
}
Output:
Total execution time to create 1000K objects in Java in millis: 18
Total execution time to create 1000K objects in Java using StopWatch in millis: 15
答案 0 :(得分:1)
以下是我在尝试保持代码优化时采取的步骤:
我的探查器会向我展示各种感兴趣的领域
答案 1 :(得分:0)
我会说你应该关心很多其他事情,所有这些都应该可以通过像Visual VM这样的工具访问:
像这样的微测试很少有用。 JVM使用运行时统计信息来优化性能,因此“刻录”可能是一个问题。
答案 2 :(得分:0)
优化的头号规则是DO NOT。除非你非常准确地知道你在做什么,否则你将优化错误的东西,错过正确的东西,使性能变差,并破坏可靠性和可读性。
专注于编写结构良好,记录完备的紧凑代码。如果以后需要优化,那么完成起来会更容易。
(请注意,在Java中测量new Object()
的性能是一个愚蠢的差事。垃圾收集器是房间里的800磅大猩猩,所以你的所有测量都没用。)
答案 3 :(得分:0)
您正在测试两种不同的测量经过时间的方法。当您在同一JVM执行中运行两个测试时,您的测试存在缺陷。这会冒第一次测试加热缓存并影响第二次测试的风险。正确的方法是在自己的JVM执行中运行每个测试。