我的程序显示Out Of Memory Error:java堆空间

时间:2014-05-28 21:48:33

标签: java

我用Java编写了一个存储图片列表的程序,类似于智能手机中的图库,我最终得到OutOfMemoryError : java heap space.

这是我的代码,我得到OutOfMemoryError ...

public void showImages(){
     // imageList is an array of path of pictures

     for(int i=0; i<imageList.length; i++){
        ImageIcon icon = new ImageIcon(imageList[i]);
        JLabel label = new JLabel();
        label.setIcon(icon);
        panel.add(label); //problem is here

        // I have made a JFrame and added a JPanel which has GridLayout
        // MY Problem Is..
        // When i try to add images in the panel,
        // then my program show 'Out Of Memory Error : java head space'
        // for each and every picture
     }
}

2 个答案:

答案 0 :(得分:2)

堆正在持有对象..这意味着你的堆满了对象

列表很长,所以你可以做两件事:

  1. 增加堆空间,有时它只是小到但这只是增加默认值的东西..你不能总是使用它

    这是一个显示示例的简单链接:http://www.mkyong.com/eclipse/eclipse-java-lang-outofmemoryerror-java-heap-space/

  2. 你可以制作一些更聪明的东西,你可以做一些像延迟加载的东西......不需要一次加载大量数据......让它像分页一样,每个页面都会得到他的数据。

  3. 例如:你有1000个imagesIcons。所以你只创建了100(0-100)..当用户按下接下来你向他显示另一个100(100-200)等屏幕。这就是你应该如何处理..

    但仍然将堆空间更改为更高..默认值太低

    希望有所帮助

答案 1 :(得分:0)

使用VisualVM来发现内存中有多少个实例(有多少个ImageIcons,多少个JLabel等)。一旦你知道哪些实例在内存中(以及每个实例消耗了多少内存),你就可以知道问题的原因。