java - java中输入1000000000个数组

标签 java arrays heap-memory

我正在尝试测试一个需要 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/

相关文章:

c++ - 当试图释放堆管理器分配的内存时会发生什么,堆管理器分配的内存比请求的多?

java - log4j冲突?

java - 如何在不最大化和最小化框架的情况下让 KeyListener 工作?

java - Springboot/Thymeleaf 在每个页面上从模型中检查当前用户

c++ - 排序多维数组 C++ 奇怪的行为

java - 使用Java的DeleteZero

java - 类似于 ews-java-api 中 IMAP 标志的属性

arrays - 从类数组创建实例

linux - 如何为 linux/unix 命令分配 RAM 和堆空间?

用于跟踪java堆大小的java库?