java 怎么测试一个对象初始化用了多少时间
public static void main(String[] args) {
        int sum = 0;
        for(int i = 0; i < 100; i++){
            long startTime = System.currentTimeMillis();
            Tika tika = new Tika();
            long endTime = System.currentTimeMillis();
            long num = endTime - startTime;
            sum += num; 
            System.out.println("程序初始化时间: " + num + "ms");
        }
        System.out.println("平均耗费时间为:" + sum/100);

    }
这样写对吗,为什么第一次对象初始化的时间比后面大了这么多,是什么原因
程序初始化时间: 914ms
程序初始化时间: 14ms
程序初始化时间: 28ms
程序初始化时间: 23ms
程序初始化时间: 11ms
程序初始化时间: 12ms
程序初始化时间: 11ms
程序初始化时间: 10ms
程序初始化时间: 11ms
程序初始化时间: 10ms
程序初始化时间: 9ms
程序初始化时间: 10ms
程序初始化时间: 8ms
程序初始化时间: 9ms
程序初始化时间: 8ms
程序初始化时间: 31ms
程序初始化时间: 14ms
程序初始化时间: 12ms
程序初始化时间: 10ms
程序初始化时间: 12ms
程序初始化时间: 18ms
程序初始化时间: 14ms
程序初始化时间: 27ms
程序初始化时间: 8ms
程序初始化时间: 10ms
程序初始化时间: 9ms
程序初始化时间: 10ms
程序初始化时间: 9ms
程序初始化时间: 7ms
程序初始化时间: 10ms
程序初始化时间: 10ms
程序初始化时间: 10ms
程序初始化时间: 15ms
程序初始化时间: 9ms
程序初始化时间: 8ms
程序初始化时间: 9ms
程序初始化时间: 8ms
程序初始化时间: 8ms
程序初始化时间: 7ms
程序初始化时间: 6ms
程序初始化时间: 7ms
程序初始化时间: 12ms
程序初始化时间: 8ms
程序初始化时间: 7ms
程序初始化时间: 6ms
程序初始化时间: 8ms
程序初始化时间: 7ms
程序初始化时间: 8ms
程序初始化时间: 7ms
程序初始化时间: 8ms
程序初始化时间: 8ms
程序初始化时间: 6ms
程序初始化时间: 7ms
程序初始化时间: 6ms
程序初始化时间: 24ms
程序初始化时间: 8ms
程序初始化时间: 9ms
程序初始化时间: 11ms
程序初始化时间: 7ms
程序初始化时间: 8ms
程序初始化时间: 7ms
程序初始化时间: 8ms
程序初始化时间: 14ms
程序初始化时间: 10ms
程序初始化时间: 9ms
程序初始化时间: 6ms
程序初始化时间: 11ms
程序初始化时间: 44ms
程序初始化时间: 10ms
程序初始化时间: 6ms
程序初始化时间: 8ms
程序初始化时间: 7ms
程序初始化时间: 7ms
程序初始化时间: 6ms
程序初始化时间: 7ms
程序初始化时间: 7ms
程序初始化时间: 6ms
程序初始化时间: 7ms
程序初始化时间: 6ms
程序初始化时间: 9ms
程序初始化时间: 6ms
程序初始化时间: 7ms
程序初始化时间: 6ms
程序初始化时间: 11ms
程序初始化时间: 9ms
程序初始化时间: 12ms
程序初始化时间: 7ms
程序初始化时间: 14ms
程序初始化时间: 5ms
程序初始化时间: 6ms
程序初始化时间: 6ms
程序初始化时间: 5ms
程序初始化时间: 8ms
程序初始化时间: 6ms
程序初始化时间: 6ms
程序初始化时间: 11ms
程序初始化时间: 9ms
程序初始化时间: 7ms
程序初始化时间: 5ms
程序初始化时间: 5ms
平均耗费时间为:18

2个回答

平均耗费时间为:18

我一般是用平均值作为耗费时间的。次数要多,100次可能不够。看需要次数跑多一点。

qq_41475316
__BlueCat 回复林兴洋: 好的,谢谢你
8 个月之前 回复
JKL852qaz
林兴洋 回复__BlueCat: 我还没深入到虚拟机这块,但有估计是类的加载问题 https://blog.csdn.net/ln152315/article/details/79223441
8 个月之前 回复
qq_41475316
__BlueCat 谢谢你的回答, 为什么初始化第一次的时间和后面差那么多呢
8 个月之前 回复

第一次实例化时间那么长的原始是因为 JVM 里面还没有 Tika 类,于是 JVM 需要将这个类装载进虚拟机,因为 JVM 不是一开始就把所有的类都加载进内存中,而是只有第一次遇到某个需要运行的类时才会加载,且只加载一次。在 new Tika()之前,Tika 类还经历了 装载 -> 验证 -> 准备 -> 解析 直到 new Tika()初始化。
这些在《深入理解 Java 虚拟机》这本书里面都有讲,下面这篇博客也讲得很详细:
https://blog.csdn.net/javazejian/article/details/73413292

qq_41475316
__BlueCat 非常感谢, 你的回答对我很有帮助.
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问