线程“AWT-EventQueue-0”中的异常java.lang.OutOfMemoryError:Java堆空间

时间:2010-10-01 17:43:22

标签: java java-web-start out-of-memory

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
                at java.awt.image.DataBufferInt.<init>(Unknown Source)
                at java.awt.image.Raster.createPackedRaster(Unknown Source)
                at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
                at java.awt.image.BufferedImage.<init>(Unknown Source)
                at sun.java2d.loops.GraphicsPrimitive.convertFrom(Unknown Source)
                at sun.java2d.loops.GraphicsPrimitive.convertFrom(Unknown Source)
                at sun.java2d.loops.MaskBlit$General.MaskBlit(Unknown Source)
                at sun.java2d.loops.Blit$GeneralMaskBlit.Blit(Unknown Source)
                at sun.java2d.pipe.DrawImage.blitSurfaceData(Unknown Source)
                at sun.java2d.pipe.DrawImage.renderImageCopy(Unknown Source)
                at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
                at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
                at sun.java2d.pipe.ValidatePipe.copyImage(Unknown Source)
                at sun.java2d.SunGraphics2D.drawImage(Unknown Source)

当我从生产中加载Web Start应用程序时,我收到此错误消息。 当我从eclipse加载相同的生产代码时,上面的错误“java.lang.OutOfMemoryError:Java堆空间”消失了,一切正常。 可能是什么原因,为什么它在eclipse中工作而不是独立工作。

-pad

2 个答案:

答案 0 :(得分:1)

Java的默认堆大小(至少我上次研究它)是128 MB。最新版本的Eclipse(即Helios)设置为以512 MB的默认堆大小运行。 (请参阅Eclipse基本路径中的eclipse.ini文件。)

因此,您可能会看到这种行为,因为您的应用程序需要一个大于128 MB的堆大小...它不能从您的系统JVM的默认值中获取,但是DOES会进入Eclipse JVM进程。

在您的Web Start“.jnlp”文件中,查找第一个<j2se>元素,并添加max-heap-size属性,如下所示:

<j2se version="1.3" initial-heap-size="256m" max-heap-size="512m"/>

参考

http://download.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/syntax.html

答案 1 :(得分:0)

eclipse中的默认max-heap-size设置可能与java webstart的默认设置不同。
您可以通过添加以下标记来编辑jnlp描述符以提供max-heap-size参数:

<j2se version="1.4+" max-heap-size="512m"/>