我的经验表明,Java中的对象创建非常缓慢。通常,我只是通过删除对象创建并重复使用相同的对象来优化我的代码。
我想知道其他语言在OOP基础上是否同样缓慢,因为对我而言,面向核心对象的语言需要花费大量时间来创建对象,这是非常反直觉的。
有人在几个语言中对此进行过分析吗?
答案 0 :(得分:18)
尝试看看你从中获得了什么 - 一些人试图让虚拟机不优化循环:
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);
}
}
我得到了
创建4000000个对象需要678毫秒
每个物体应该在170纳秒左右。
答案 1 :(得分:9)
虽然在极少数情况下可能会有noticeable CPU impact,但一般情况下,当前虚拟机的对象创建速度与实际情况一样快。
Here是一篇我喜欢的文章,名为“Urban performance legends”,我认为这只是其中一个神话。
另请参阅http://www.javaperformancetuning.com/tips/rawtips.shtml,了解如何调整Java App的性能。
问候。