批量对象分配java

时间:2012-01-30 03:37:48

标签: java constructor memory-management

有没有办法批量分配一堆对象?

我有以下缓慢的代码并希望快速完成:

final int N = 10000000;
Node[] a = new Node[N];
for (int i = 0; i < N; ++i) {
  a[i] = new Node(-1, null);
}

我希望有一些低级方法(比如可用于阵列的方法)可以快速完成工作。

3 个答案:

答案 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运行时,您需要支付大部分费用。