我需要在列表中存储大量(~4294967294)个对象,但我得到的是异常。请建议如何使用java-8存储和处理大量对象。
代码:
List<String> ipv4FreeAddress = new ArrayList<String>();
for (long i = longValueFrom; i <= longValueTo; i++) {
ipv4FreeAddress.add(DimNumber.getIPFromNumber(String.valueOf(i)));
}
错误:
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.add(ArrayList.java:458)
答案 0 :(得分:0)
如果您需要在列表中存储40亿个项目,则可能有更有效的方法。我不知道你需要什么,所以我无法告诉你使用什么方法。由于看起来您正在比较IPv4地址,因此您可以创建一个函数来即时比较它们而不是列表。
答案 1 :(得分:0)
你有没有做过一些估计? 您可以在int []中将ipv4存储为int(小心处理符号)。
即使这样,4Gi * 4也是16GiB的内存。你最好有ram(除非你存储到磁盘)并且已经将-Xmx设置得足够高(例如:java -Xmx20g ...)
同时,如果你跳过多播ip范围,你可以保存一些ips,如果你不关心那些。
但最重要的问题是你想要做什么需要这样一个实时结构?