Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.OutOfMemoryError:java堆空间_Java_List_Collections_Heap_Out Of Memory - Fatal编程技术网

java.lang.OutOfMemoryError:java堆空间

java.lang.OutOfMemoryError:java堆空间,java,list,collections,heap,out-of-memory,Java,List,Collections,Heap,Out Of Memory,我在玩Oracle网站上的一些收藏示例 public class Timing { public static void method(){ List numbers = new ArrayList(); for (double i = 1; i <= Double.MAX_VALUE; i++) numbers.add(new Double(i)); Collections.shuffle(numbers);

我在玩Oracle网站上的一些收藏示例

public class Timing {

    public static void method(){

        List numbers = new ArrayList();

        for (double i = 1; i <= Double.MAX_VALUE; i++)
        numbers.add(new Double(i));

        Collections.shuffle(numbers);
        List winningcombination = numbers.subList(0, 10);
        Collections.sort(winningcombination);
    }

    public static void main(String[] args)
    {
        long start = System.currentTimeMillis();
        method();
        long end = System.currentTimeMillis();
        System.out.println("time elapsed : " + (end-start));
    }
}

我有办法解决这个问题吗?

即使你有足够的内存,
ArrayList
最多只能有
Integer.MAX\u VALUE
元素<代码>双倍。最大值远远超过上述限制


在这种情况下,在导致数组列表增长的
添加过程中内存不足。

即使内存足够,
数组列表
最多可以包含
整数.MAX\u值
元素<代码>双倍。最大值
远远超过上述限制


在这种情况下,在导致数组列表增长的
添加过程中内存不足。

是否有方法允许您在
集合中创建和存储
Double.MAX_VALUE
对象?不,地球上没有那么多公羊<代码>双精度。最大值约为308次方的2倍10:即2后跟300多个零。给百思买打个电话,看看他们把它放在你的电脑里要收多少钱。

有没有办法让你在
集合中创建和存储
Double.MAX\u VALUE
对象?不,地球上没有那么多公羊<代码>双精度。最大值约为308次方的2倍10:即2后跟300多个零。给百思买打个电话,看看他们会向你的电脑收取多少费用。

增加堆的大小就可以了。只需使用以下参数运行程序:

-Xmx512m

它会将堆大小增加到512 MB。您可以指定任意数量:1g、2g等等。

增加堆的大小就可以了。只需使用以下参数运行程序:

-Xmx512m

它会将堆大小增加到512 MB。您可以指定任意数量的值:1g、2g等等。

您正在尝试分配10^308个值的顺序。这是很多价值观

您正在尝试分配10^308个值的顺序。这是很多价值观

for(双i=1;i
for(双i=1;i在您的循环中:

for (double i = 1; i <= Integer.MAX_VALUE; i++)
        numbers.add(new Double(i));
for (double i = 1; i <= Double.MAX_VALUE; i++)
    numbers.add(new Double(i));
for(双i=1;i在您的循环中:

for (double i = 1; i <= Double.MAX_VALUE; i++)
    numbers.add(new Double(i));

for(double i=1;i您的代码无法工作的另一个原因:
double
只能精确地表示大约2^52的整数-此后,
i++
将无效,
for
循环将永远不会终止


千万不要将浮点变量用作循环计数器。请改用
int
long

代码无法工作的另一个原因是:
double
只能精确地表示大约2^52的整数-此后,
i++
将无效,而
for
循环将永远不会终止


千万不要将浮点变量用作循环计数器。请改用
int
long

不要执行当前正在执行的操作,只需获得10个随机双精度,将它们添加到ArrayList并对其排序。这基本上就是您的方法所执行的操作


要获得一个随机双精度,请查看。

与当前所做的操作不同,您只需获得10个随机双精度,将它们添加到ArrayList中并对其进行排序。这基本上就是您的方法所做的



要获得随机双精度,请查看。

超出“多少?”(我只想看到一个大数字^^)超过“多少?”(我只想看到一个大数字^^)@OpenMind:解决方案不是尝试不可能的事情。没有解决方案。你不能存储那么多!解决方案是对循环使用一个更小的上限,比如说,不超过一百万。@OpenMind,你到底想做什么?生成10个保证没有重复的随机数?如果是,请查看伪random数字生成器。此外,我不明白为什么您要生成双打而不是长或字母数字等的赢组合。请编写一个更好的算法,只存储已选择的数字,如果您得到了相同的数字,但您没有足够的数量,则再次随机进行。@OpenMind:解决方案不是尝试不可能的事情。没有解决方案。你不能存储那么多!解决方案是对你的循环使用一个小得多的上限——比如说,不超过一百万左右。@OpenMind,你到底想做什么?生成10个保证没有重复的随机数?如果是的话,请查看伪随机数生成器。另外,我不明白你为什么这样做用双数而不是长数或字母数字等组合获胜。写一个更好的算法,只需存储已经选择的数字,如果你有相同的数字,并且没有足够的数字,再进行一次随机。放在一个真实的角度?
10^308
看起来很小;p@pst 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;p@pst100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000s解决
OutOfMemory
异常?(PC仍然无法接近。)这样更好,尽管你可能仍然没有那么多内存。这大约是20亿个对象,每个对象至少12字节,加上数组列表中的数组;因此对象为24GB,数组为8B。@Ernest:嗯,消费级PC拥有24GB内存并非完全不可能;事实上,5年后可能会很正常。事实上,这就是为什么我说“你可能还没有那么多”。我有一个服务器