我正在尝试测试一个需要 1,000,000,000 个数组输入的算法。
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 的数组,但它太大,无法放入堆中(十亿个 4 字节整数)。
最有可能的是,如果您想这样做,您将需要在 64 位操作系统上运行 64 位 Java(并且可能需要大量物理内存以提高性能),并增加堆大小设置为比默认值大得多的值(例如使用 java -Xmx6g
或类似的值)。
或者,如果您的算法能够对分段数据进行操作,那可能是更好的选择。
因此,如果您要对文件中的项目进行求和,则可以一次将它们带入一千个,以便将它们添加到运行总计中。如果存在大量对各种不同整数的随机访问,那么这并不容易,但在这种情况下,您可以在磁盘上创建数组并使用缓存/LRU 接口(interface)来确保只加载所需的内容任何给定点。
关于java - java中输入1000000000个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30250788/