【发布时间】:2014-06-30 22:20:42
【问题描述】:
我正在尝试将大量 long 存储到一个数组中,但我的数组和 ArrayList 出现 OOM 错误。
ArrayList<Long> A = new ArrayList<Long>();
Long[] B = new Long[100000000];
for(int i = 0; i < 100000000; i++) A.add(i);
for(int i = 0; i < 100000000; i++) B[i] = (long) i;
//Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
//at java.lang.Integer.valueOf(Unknown Source)
还有其他简单的数据结构可以用来存储如此大量的长整数或整数吗?
【问题讨论】:
-
您是否有理由不只是为 JVM 提供更大的堆?
-
无论你使用什么数据结构,大量的
long/int` 值都会占用一定的内存——对于 1 亿个值,对于ints 和 400 MBlongs 为 800 MB。数组尽可能精简 -
堆大小的设置是什么? 1 亿
Long并不是特别大。要设置堆大小限制,请使用“-Xmx”java 命令行选项。参考:docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html -
你想用这些做什么?您是否真的需要存储一个连续的整数列表,或者这是否适用于您实际上具有较少可预测值的应用程序,例如随机生成的值?
标签: java arrays out-of-memory