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

以Java输入大小为10^8的数组[重复]

罗渝
2023-03-14

如何取大小的数组

下面的代码给出了运行时错误和java.lang.OutOfMemoryError。这个问题我已经问过多次了,但始终没有得到答案,因为对于n和arr[I]的大值,它会产生错误。我知道不能用下面给出的方法来做。所以问题是,如何在Java中实现?

n=100000000;//User input
int[] arr=new int[n];
int[] b=new int[n];
for(int i=0;i<n;i++)
{
    b[i]=arr[i]+1;
}

共有3个答案

华项明
2023-03-14

首先,调查是否真的有必要将整个阵列保留在内存中。在许多情况下,您可以通过一次只处理一个元素来执行所需的操作。

如果确实需要存储数组,您可以在示例中分配两个int数组,每个数组包含1e8个元素。它们大约需要800MB的内存。这在现代硬件上并不是遥不可及的。只要确保启动JVM时有足够的堆空间。请参阅-Xmx-Xms选项。

商松
2023-03-14

这里的限制总是受到物理可用存储器的限制。Java的原语类型int需要32位(4字节),1亿int需要大约400MB的内存。

默认的JVM最大堆大小因Java的每个版本而异。让我们以Java8为例,根据OracleJava8留档

最大堆大小

物理内存的 1/4 或 1GB 较小。在 Java SE 5.0 之前,默认的最大堆大小为 64MB。您可以使用 -Xmx 命令行选项覆盖此缺省值。

因为您需要两个阵列,所以需要800MB

您需要用比如-Xms800M启动java(这将设置初始堆大小为800MB ),并将最大堆大小设置为适合您的系统的值,比如1GB -Xms1G

荀靖
2023-03-14

您的记忆分为Xmx(年轻和老年),永久,堆栈和杂项区域。您需要扩展 Xmx 内存来处理更大的对象。分割爪哇内存的示例

 类似资料:
  • 问题内容: 我正在学习Java 8文档。我知道最大数组大小定义为均值2 ^ 31 – 8 = 2147483639 。然后,我集中讨论了为什么要减去8 或减去? 有些人根据文档给出了一些逻辑。因此,对于标题字,减去8。但是在这种情况下,如果标题字需要大于8,那么答案是什么? 请在此基础上澄清我。预先感谢您的合作。 问题答案: 阅读上述有关Java内存管理的文章,其中清楚指出 我认为这适用于Arra

  • 有谁可以指导我在正确的方向上如何创建一个数组的这些员工?数组设置为常数size=10;下面是我的employee类和我尝试的数组的驱动程序。此外,我知道大部分输出都是空的(员工姓名、id等),因为我已经知道如何编写它,但到目前为止还没有。此外,类名“Employee 1”中的“1”之所以存在,是因为我已经在Employee下保存了另一个文件。你很可能知道,对Java很陌生。谢谢 我的驱动程序类:

  • 问题内容: 如何自动将大小作为流的大小? 问题答案: 该被形成围绕其是迭代器的一种高级形式。这些可以报告某些特征,从而可以优化操作。他们还可能报告预期的元素数量,无论是估计的还是精确的。如果A事先知道元素数量,它将报告一个特征。 给定封装操作,您可以使用以下方法测试关于a元素的知识: 您可以使用它来学习某些操作如何影响有关元素的知识。例如,当您在以下测试程序中使用此方法时: 它将打印: 正如JB

  • null 请在此基础上向我澄清。谢谢你的合作。

  • 问题内容: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度? 再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 问题答案: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度?再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 目前尚不清楚您所处的状态。如果您知道执行时的数组长度而不是编译时的数组长度,那就可以了: 您可

  • 在上一个练习中你做了一些算术运算,并且使用了'\0'(空)字符。这对于其它语言来说非常奇怪,因为它们把“字符串”和“字节数组”看做不同的东西。但是C中的字符串就是字节数组,并且只有不同的打印函数才知道它们的不同。 在我真正解释其重要性之前,我先要介绍一些概念:sizeof和数组。下面是我们将要讨论的一段代码: #include <stdio.h> int main(int argc, char