【发布时间】:2014-05-20 20:48:08
【问题描述】:
考虑以下情况
int[] anArray = new int[10];
为堆上每个32位的10个元素分配内存。对吗?
如果元素类型是Object,那么元素的大小是多少。 ??
喜欢
Object[] objArray = new Object[10];
现在在堆上分配了多少内存?我刚刚通过ssing ArrayList的源代码得到了疑问。
private transient Object[] elementData;
刚刚在我的机器上试过这条线
List<String> s = new ArrayList<String>(Integer.MAX_VALUE);
结果
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at java.util.ArrayList.<init>(Unknown Source)
at com.nextenders.server.guice.actions.servlets.Test.main(Test.java:13)
所以我想知道分配了多少内存。
【问题讨论】:
-
请允许我从@Duncan 链接问题中提取(并稍微调整)相关的 sn-ps:
New Object[10] creates space for 10 Object references only. It does not create 10 Object objects (or even free space for 10 Object objects)和Each reference will be an address: 32 bit on 32 bit CPU, 64 at 64 -
是的,请参阅
or even free space for 10 Integer objects行。那么为什么OutOfMemoryError只是为了初始化而发生呢?? -
因为
ArrayList<String>(Integer.MAX_VALUE);请求了 2^(31-1) 个地址。 -
奇怪的情况我很好奇解决方案
标签: java arrays memory-management