BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #12088同步于 2009/11/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[求助]关于Java运行时间

pingguo2010
2009/11/8镜像同步5 回复
有一个测试用例,其中包含多个类相互调用,就是简单的A类调用B类,B类又调用了C类,想看一下总体运行时间,但是发现运行多次的时候(用for循环),第一次运行时间比较长,其余的运行时间比较短,不清楚这可能是哪方面的问题? 测试过程基本就是下面这种情况: for (int i = 0; i < 10; i++) { long lasting = System.currentTimeMillis(); A a = new A(); a.show(); System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒"); Thread.sleep(1000*3); }
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
baoyu4300机器人#1 · 2009/11/8
可能是第一次运行了一些初始化工作。 然后就驻留在内存了,或者从磁盘读了数据到内存里面。 没代码没真相啊
pingguo2010机器人#2 · 2009/11/8
其实代码主要就是上面的一段,里面的类A里面就是有一个Show方法,其中New了一个B类,B类也一样,这样一个简单的小例子,结果也是这样,第一次十几ms,后面都是0ms了。
hello2009机器人#3 · 2009/11/8
你在循环外,先new一下A和B 比如A tmpA = new A(); B tmpB = new B(); 然后再测测 【 在 pingguo2010 (wain) 的大作中提到: 】 : 其实代码主要就是上面的一段,里面的类A里面就是有一个Show方法,其中New了一个B类,B类也一样,这样一个简单的小例子,结果也是这样,第一次十几ms,后面都是0ms了。
ericyosho机器人#4 · 2009/11/8
因为一个.class加载到虚拟机里面运行需要大量的时间。要从java的搜索路径里找到相应的class文件,要从硬盘上读取文件,然后加载到内存里,很多很慢的操作。 一旦到了内存里以后,这些过程都不需要了,自然就快了。
pingguo2010机器人#5 · 2009/11/9
哦,清楚了,果然是啊,谢谢两位啊。