gpt4 book ai didi

java - 有多少内存分配给 Object[] 中的元素

转载 作者:搜寻专家 更新时间:2023-11-01 02:45:35 25 4
gpt4 key购买 nike

考虑下面的情况

int[] anArray = new int[10]; 

为堆上每个 32 位 的 10 个元素分配内存。对吗?

那么如果元素类型是Object,那么元素的大小是多少。 ??

喜欢

Object[] objArray = new Object[10];

现在在堆上分配了多少内存?我刚刚通过查看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)

所以我想知道分配了多少内存。

最佳答案

So what is the size of the element if the element type is Object. ??

Object[] 数组元素的大小是引用的大小。

  • 在 32 位 JVM 上,引用是 32 位(4 字节)

  • 在 64 位 JVM 上,引用为 64 位(8 字节),如果启用“压缩 oop”优化且堆大小小于 32Gb,则引用为 32 位。

因此,您的数组分配将分配一个堆对象,其中包含大约 4 x 10 或 8 x 10 字节……加上大约 12 字节的对象头开销。

Just tried this line in my machine

List<String> s = new ArrayList<String>(Integer.MAX_VALUE);

在幕后,您正在尝试分配尝试分配一个包含 233 和 234 字节的数组。对于 32 位 JVM,这肯定行不通。使用 64 位 JVM,您需要至少 8Gb(压缩 oop)或 16Gb 的堆才能工作。

关于java - 有多少内存分配给 Object[] 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22932251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com