我需要编写一个可以容纳2 ^(N / 2)个元素的数组。 N可以大到2 ^ 62,大约是20亿个元素。有没有办法存储所有这些元素而不给Java更多的内存?我正在使用此字符串列表来搜索冲突/查找重复项。
修改
我正在尝试对Sha-1的一部分执行生日哈希攻击。 N可以大到2 ^ 62。为了执行生日攻击,我需要生成2 ^(N / 2)个设定长度的随机字符串。
编辑编辑
这是用于加密分配。
答案 0 :(得分:2)
你可以这样做。我刚试过以下练习:
这是我的代码:
public class TestBigArray {
public static void main(String[] args) {
String[] a = new String[2*1_000_000_000];
}
}
我尝试使用默认堆运行它并获得了excpetion:
c:\temp>java TestBigArray
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at TestBigArray.main(TestBigArray.java:3)
然后我将堆增加到20G并且程序运行了:
c:\temp>java -Xmx20G TestBigArray
c:\temp>
但是我的笔记本电脑上花了一分钟才启动,Windows在此期间几乎停滞不前。
所以,我不建议你在练习中做这样的事情,除非你真的需要这个并且你有非常强大的机器可以运行。我建议您使用集合(例如列表),特别是LinkedList
。