Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
100000000个java数组输入_Java_Arrays_Heap - Fatal编程技术网

100000000个java数组输入

100000000个java数组输入,java,arrays,heap,Java,Arrays,Heap,我正在尝试测试一个需要100000000数组输入的算法 Scanner scanner = new Scanner(new File("999999998.txt")); int[] tall = new int[1000000000]; int i = 0; while (scanner.hasNextInt()) { tall[i++] = scanner.nextInt(); } 将引发此异常: Exception in thread "main" java.lang.OutOf

我正在尝试测试一个需要100000000数组输入的算法

Scanner scanner = new Scanner(new File("999999998.txt"));
int[] tall = new int[1000000000];
int i = 0;
while (scanner.hasNextInt()) {
    tall[i++] = scanner.nextInt();
}
将引发此异常:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
您试图创建一个(大致)4G阵列,但它太大,无法放入堆中(10亿个4字节整数)

最有可能的情况是,如果您想这样做,您需要在64位操作系统上运行64位Java(可能需要大量物理内存以提高性能),并将堆大小增加到比默认值大得多的值(例如使用
Java-Xmx6g
或类似的方法)

或者,如果您的算法能够对数据进行分段操作,那么这可能是一个更好的选择

因此,如果您对文件中的项目求和,您可以一次将它们放入1000个,将它们添加到一个运行总数中。现在,如果对各种不同的整数进行大量随机访问,那么这并不容易,但是,在这种情况下,您可以在磁盘上创建阵列,并使用缓存/LRU接口来确保在任何给定点只加载所需的内容。

您正试图创建一个(大致)4G阵列,它太大,无法放入堆中(10亿个4字节整数)

最有可能的情况是,如果您想这样做,您需要在64位操作系统上运行64位Java(可能需要大量物理内存以提高性能),并将堆大小增加到比默认值大得多的值(例如使用
Java-Xmx6g
或类似的方法)

或者,如果您的算法能够对数据进行分段操作,那么这可能是一个更好的选择


因此,如果你要对文件中的项目求和,你可以一次将它们放入1000个,将它们添加到一个运行总数中。现在,如果存在大量对各种不同整数的随机访问,那么这并不容易,但是,在这种情况下,你可以在磁盘上创建数组,并使用缓存/LRU接口确保只加载wha首先,我同意所有的评论和回答,这些评论和回答建议你尽量少保存数据

假设您确实需要所有这些数据,您需要使用-Xmx标志启动具有更多内存的java容器:

java -Xmx6g <your launch args here>
java-Xmx6g

如果您不能使用上述参数启动Java,那么这意味着您要么运行32位Java,要么没有6GB的可用内存(这两种情况下都意味着您无法分配如此大小的数组)。

首先,我同意所有的评论和回答,建议您尽量保留尽可能少的数据

假设您确实需要所有这些数据,您需要使用-Xmx标志启动具有更多内存的java容器:

java -Xmx6g <your launch args here>
java-Xmx6g

如果无法使用上述参数启动Java,则表示您正在运行32位Java,或者没有6GB可用内存(这两种情况下都意味着您无法分配这样大小的数组).

我建议不要使用几乎4GB的阵列,原因有很多,第一,如果不是所有的ram资源,你会吃掉大部分,第二,分解它可能更容易,而且总的来说更好

尝试将数据分解成不同的文件,或者简单地将文件中的数据逐块读取到数组中,然后像这样处理

如果希望像这样处理数据,请执行以下操作:

1) 。确保您使用64位操作系统和64位java版本,否则这将是不可能的

2) 。将java内存堆大小增加到4GB以上,可能是5或6。使用命令java-Xmx6g programName,其中xmx是命令,6g是堆大小,programName是程序名。从windows命令提示符运行程序时。或者只是在IDE中设置


希望这有帮助。

我建议不要使用几乎4GB的阵列,原因有很多,首先你会吃掉大部分(如果不是全部的话)ram资源,其次,分解它可能更容易,而且总的来说更好

尝试将数据分解成不同的文件,或者简单地将文件中的数据逐块读取到数组中,然后像这样处理

如果希望像这样处理数据,请执行以下操作:

1) 。确保您使用64位操作系统和64位java版本,否则这将是不可能的

2) 。将java内存堆大小增加到4GB以上,可能是5或6。使用命令java-Xmx6g programName,其中xmx是命令,6g是堆大小,programName是程序名。从windows命令提示符运行程序时。或者只是在IDE中设置


希望这有帮助。

您真的需要将所有数字同时存储在内存中吗?这是4GB…你的堆小于4GB(你的数组大小)。是的,我需要用大输入测试我的算法,以便与其他算法进行比较。如何增加堆?指定您的算法,这将大大有助于提供除“如果这个,做A,否则如果那个,做B,…”之外的更有针对性的解决方案。您真的需要将所有数字同时存储在内存中吗?这是4GB…你的堆小于4GB(你的数组大小)。是的,我需要用大输入测试我的算法,以便与其他算法进行比较。我怎样才能增加堆?请指定您的算法,这将大大有助于提供除“如果这个,做A,否则如果那个,做B,…”之外的更有针对性的解决方案。谢谢@TimBiegeleisen-在您修改我的答案的同时!!:)我应该在哪里写代码?我试着在netbeans上的VM选项上写类似的东西,但在这里它不是Workbook:谢谢@TimBiegeleisen-在您修改我的答案的同时!!:)我应该在哪里写代码?我曾尝试在netbeans上的VM选项上编写类似的内容,但这里没有Workbook:除了64位JVM和大型堆之外,根据算法的访问模式,它可能还需要超过4GB的物理内存。@Patric