当前位置: 首页 > 知识库问答 >
问题:

为什么我不能创建一个大尺寸的数组?

宗政和韵
2023-03-14

为什么不可能创建最大int大小的数组?

int i = 2147483647;
int[] array = new int[i];

我找到了这样的解释:

new int[Integer.MAX_VALUE - 5];
    null

共有1个答案

万坚壁
2023-03-14

有两种可能的例外情况:

  • OutOfMemoryError:Java heap space表示数组不适合Java堆空间。为了解决这个问题,您可以通过使用JVM选项-xmx来增加最大堆大小。还要考虑对象的最大大小不能大于最大堆生成量。
  • OutOfMemoryError:请求的数组大小超出VM限制表示超出了平台特定的大小:
    • 上限由用于描述数组中索引的大小类型的限制设置,因此理论数组大小由2^31-1=2147483647元素限制。
    • 另一个限制是特定于JVM/平台的。根据Java语言规范第10章:数组,Java SE7版对数组长度没有严格的限制,因此可以在不违反JLS的情况下减少数组大小。

    在HotSpot中,JVM数组的大小受到内部表示的限制。在GC代码中,JVM将堆字中数组的大小传递为int,然后从堆字转换回jint,这可能会导致溢出。因此,为了避免崩溃和意外行为,最大数组长度由(max size-header size)限制。其中头大小取决于用于构建您正在运行的JVM的C/C++编译器(用于linux的gcc,用于macos的clang)和运行时设置(如useCompressedClassPointers)。例如在我的Linux上:

      null
    • https://bugs.openjdk.java.net/browse/jdk-8059914
    • https://bugs.openjdk.java.net/browse/jdk-8029587

 类似资料:
  • 根据我对CNN的理解,扁平化用于从2D到1D,以便可以使用密集层进行分类。同样在我的理解中,扁平化的结果是过滤器的尺寸乘以过滤器的数量。 为什么扁平化后,第一个密集层不一定要与扁平化的结果具有相同的维度(这将是过滤器*过滤器的暗淡值)?第一个密集层的节点比扁平化的暗淡值更少或更大的CNN都可以工作,但我不知道为什么。扁平化不是应该为您提供密集层的输入吗?

  • 我创建了一个包含大量数据的xml。现在,我正在尝试将生成的xml写入一个文件。 声明: 写入文件: 如果返回有限的记录,则该记录是工作文件,但如果超出大小(几乎35 KB),则会出现错误:

  • 这不是创建泛型数组。编译器理解/确定应该没有问题,不是吗?

  • 我已经阅读了这个问题的一些答案(为什么我不能创建大尺寸的数组https://bugs.openjdk.java.net/browse/JDK-8029587)我不理解以下内容。“在GC代码中,我们将对象的大小以单词的形式传递为int。”据我所知,JVM中单词的大小为4字节。根据这一点,如果我们将单词中的大尺寸长数组(例如MAX_INT-5)的大小作为INT传递,我们必须获得OutOfMemoryE

  • 问题内容: 这是我正在运行的命令: 另外,我正在使用自制Python运行Mac 这是我的setup.py脚本:https : //gist.github.com/cloudformdesign/4791c46fe7cd52eb61cd 我要疯了-我不知道为什么这不起作用。 问题答案: 首先安装软件包: 文档并不太清楚,但是 “ wheel项目为setuptools提供了bdist_wheel命令”