我的经验表明,Java中的对象创建非常缓慢.通常,我只是通过删除对象创建并重复使用相同的对象来优化我的代码.
我想知道它在OOP基础上的其他语言是否同样缓慢,因为对我而言,面向硬核对象的语言需要花费大量时间来创建对象,这是非常反直觉的.
有人在几个langauges上描述过这个吗?
nos*_*nos 18
尝试看看你从中得到了什么 - 一些运动试图让VM不优化循环:
import java.util.ArrayList;
import java.util.Random;
class DummyInteger {
private int i;
public DummyInteger(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
public class ObjectCreationTest {
final static int ITERATIONS = 2000000;
public static void main(String[] args) {
Random r = new Random(System.currentTimeMillis());
int[] randArr = new int[ITERATIONS];
for(int i = 0; i < ITERATIONS; i++) {
randArr[i] = r.nextInt();
}
DummyInteger[] iArr = new DummyInteger[ITERATIONS];
long start = System.currentTimeMillis();
for(int i = 0; i < ITERATIONS; i++) {
ArrayList<DummyInteger> list = new ArrayList<DummyInteger>();
list.add(new DummyInteger(randArr[i]));
iArr[i] = list.get(0);
}
long end = System.currentTimeMillis();
System.out.println(String.format("Creating %d objects took %d ms",ITERATIONS*2,end-start));
int sum = 0;
for(DummyInteger mi: iArr) {
sum += mi.getI();
}
System.out.println(sum);
}
}
Run Code Online (Sandbox Code Playgroud)
我有
创建4000000个对象需要678毫秒
每个物体应该在170纳秒左右.
虽然在极少数情况下可能会有明显的CPU影响,但一般情况下,当前虚拟机的对象创建速度与实际情况一样快.
这是一篇文章我喜欢叫"都市传说的表现",我认为这只是那些神话之一.
另请参阅http://www.javaperformancetuning.com/tips/rawtips.shtml,了解如何调整Java App的性能.
问候.
归档时间: |
|
查看次数: |
5725 次 |
最近记录: |