Java中的对象创建很慢 [英] Object creation in Java is slow
问题描述
我的经验表明,Java中的对象创建非常缓慢。通常,我只是通过删除对象创建并重复使用相同的对象来优化我的代码。
My experience shows that object creation in Java is very slow. Often, I optimize my code by just removing object creation and using the same objects repeatedly.
我想知道它在OOP基础上的其他语言是否同样慢,因为对我而言,一种非常直观的语言是面向硬核对象的语言,需要这么多创建对象的时间。
I am wondering if its similarly slow in other language with OOP base, because, to me, it is very counter intuitive that a language that's hardcore object oriented, takes so much time for object creation.
有没有人在几个langauges上对此进行了分析?
Has anybody profiled this on several langauges?
推荐答案
尝试看看你从中得到了什么 - 一些人试图让虚拟机不优化循环:
Try see what you get from this - some exercising to try to get the VM to not optimize the loop away:
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 ms
Creating 4000000 objects took 678 ms
每个对象应该在170纳秒左右。
Which should be around 170 nanosecond per object.
这篇关于Java中的对象创建很慢的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!