有没有办法批量分配一堆对象?
我有以下缓慢的代码并希望快速完成:
final int N = 10000000;
Node[] a = new Node[N];
for (int i = 0; i < N; ++i) {
a[i] = new Node(-1, null);
}
我希望有一些低级方法(比如可用于阵列的方法)可以快速完成工作。
答案 0 :(得分:2)
没有!语言中没有内置功能。使用object
构造进行分配时会分配new
。
答案 1 :(得分:1)
Node
有多大?它是一个长寿的物体吗?这段代码很慢的原因是因为你可能正在点击GC。使用分析器运行此代码,查看您的程序在GC中花费的时间。你可以做的是增加堆大小,并可能将幸存者空间设置为0,这样你的对象就可以从年轻一代直接进入终身空间,而不会被幸存者空间复制。如果经常发生这种分配,那么就要提高年轻代的比例,以便整个事情能够适应那里。
有关gc tuning的更多信息:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
编辑为了估计你需要多少内存 - 数组本身大约是40兆字节,然后无论所有节点的大小是多少,从最小80 MB开始(每个对象有8个字节的开销+其字段的大小)。如果您有64位JVM,则可以轻松地将这些数字加倍。
答案 2 :(得分:0)
Node的ctor中有什么有趣的事吗?
Java分配内存的开销很低。 GC运行时,您需要支付大部分费用。