java.lang.out的内存错误

时间:2010-08-19 06:02:19

标签: java memory

我们是12年级的ip学生...  我们正面临这个例外,我们不知道如何纠正这个例外。

run:
Exception in thread "Image Fetcher 1" java.lang.OutOfMemoryError: Java heap space
        at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
        at java.awt.image.Raster.createPackedRaster(Raster.java:458)
        at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
        at sun.awt.image.ImageRepresentation.createBufferedImage(ImageRepresentation.java:230)
        at sun.awt.image.ImageRepresentation.setPixels(ImageRepresentation.java:484)
        at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:120)
        at sun.awt.image.JPEGImageDecoder.sendPixels(JPEGImageDecoder.java:97)
        at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
        at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119)
        at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:246)
        at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
        at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
        at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
        at java.awt.image.Raster.createPackedRaster(Raster.java:458)
        at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
        at sun.awt.image.SunVolatileImage.getBackupImage(SunVolatileImage.java:225)
        at sun.awt.image.VolatileSurfaceManager.getBackupSurface(VolatileSurfaceManager.java:252)
        at sun.awt.image.VolatileSurfaceManager.initialize(VolatileSurfaceManager.java:108)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:72)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:82)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:93)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:87)
        at sun.awt.windows.WComponentPeer.createVolatileImage(WComponentPeer.java:604)
        at java.awt.Component.createVolatileImage(Component.java:3316)
        at java.awt.Component$BltBufferStrategy.createBackBuffers(Component.java:4038)
        at java.awt.Component$BltBufferStrategy.<init>(Component.java:3983)
        at java.awt.Component$BltSubRegionBufferStrategy.<init>(Component.java:4236)
        at java.awt.Component.createBufferStrategy(Component.java:3567)
        at java.awt.Window.createBufferStrategy(Window.java:3012)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:844)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:795)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.getBufferStrategy(BufferStrategyPaintManager.java:728)
        at javax.swing.BufferStrategyPaintManager.prepare(BufferStrategyPaintManager.java:505)
        at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:263)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
        at javax.swing.JComponent.paint(JComponent.java:1013)
        at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
        at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
        at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
        at java.awt.Container.paint(Container.java:1780)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
        at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
        at java.awt.image.Raster.createPackedRaster(Raster.java:458)
        at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
        at sun.awt.image.SunVolatileImage.getBackupImage(SunVolatileImage.java:225)
        at sun.awt.image.VolatileSurfaceManager.getBackupSurface(VolatileSurfaceManager.java:252)
        at sun.awt.image.VolatileSurfaceManager.initialize(VolatileSurfaceManager.java:108)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:72)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:82)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:93)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:87)
        at sun.awt.windows.WComponentPeer.createVolatileImage(WComponentPeer.java:604)
        at java.awt.Component.createVolatileImage(Component.java:3316)
        at java.awt.Component$BltBufferStrategy.createBackBuffers(Component.java:4038)
        at java.awt.Component$BltBufferStrategy.<init>(Component.java:3983)
        at java.awt.Component$BltSubRegionBufferStrategy.<init>(Component.java:4236)
        at java.awt.Component.createBufferStrategy(Component.java:3567)
        at java.awt.Window.createBufferStrategy(Window.java:3012)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:844)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:795)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.getBufferStrategy(BufferStrategyPaintManager.java:728)
        at javax.swing.BufferStrategyPaintManager.prepare(BufferStrategyPaintManager.java:505)
        at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:263)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
        at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
        at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
        at java.awt.image.Raster.createPackedRaster(Raster.java:458)
        at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
        at sun.awt.image.SunVolatileImage.getBackupImage(SunVolatileImage.java:225)
        at sun.awt.image.VolatileSurfaceManager.getBackupSurface(VolatileSurfaceManager.java:252)
        at sun.awt.image.VolatileSurfaceManager.initialize(VolatileSurfaceManager.java:108)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:72)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:82)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:93)
        at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:87)
        at sun.awt.windows.WComponentPeer.createVolatileImage(WComponentPeer.java:604)
        at java.awt.Component.createVolatileImage(Component.java:3316)
        at java.awt.Component$BltBufferStrategy.createBackBuffers(Component.java:4038)
        at java.awt.Component$BltBufferStrategy.<init>(Component.java:3983)
        at java.awt.Component$BltSubRegionBufferStrategy.<init>(Component.java:4236)
        at java.awt.Component.createBufferStrategy(Component.java:3567)
        at java.awt.Window.createBufferStrategy(Window.java:3012)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:844)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:795)
        at javax.swing.BufferStrategyPaintManager$BufferInfo.getBufferStrategy(BufferStrategyPaintManager.java:728)
        at javax.swing.BufferStrategyPaintManager.prepare(BufferStrategyPaintManager.java:505)
        at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:263)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
        at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
BUILD SUCCESSFUL (total time: 25 seconds)

5 个答案:

答案 0 :(得分:8)

增加堆空间。如果未指定更高的最大值,Java将使用64MByte堆内存。像这样开始你的应用程序:

java -Xmx128m MyClass

有128MByte。


看起来你在ant build中启动应用程序。我会分开建筑和执行。让ant创建一个批处理文件,用于启动应用程序。

现在您可能需要为ant本身增加堆空间。这是通过环境变量(为windows显示的解决方案)完成的:

set ANT_OPTS=-Xms512m -Xmx512m

进一步阅读

答案 1 :(得分:2)

您可以使用以下选项设置堆大小:

  -Xms32m -Xmx128m

在此处查看VM选项:

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

但我会建议你检查消耗堆积的东西。您可以使用以下分析工具来执行此操作:

答案 2 :(得分:1)

其他答案并非完整而完整的答案。它们只是乐队助手。根本原因是因为您正在创建一个ImageIcon对象,该对象在后台创建这些线程。由于JPG腐败,我也遇到了这个问题。如果将内存大小增加到1 TB并不重要,如果用户上传损坏的图像,则可能会将所有内容都降低。相反,使用ImageIO并捕获创建周围的内存不足错误:

try { // catch OutOfMemoryError for corrupt JPG
    BufferedImage inImage = ImageIO.read(new File(jpgAbsPath));
} catch (OutOfMemoryError oome) {
    logger.log(Level.SEVERE, "Out of memory error when trying to read image " + jpgAbsPath +" .", oome);
    return;
}

请点击此处了解详情:http://www.coderanch.com/t/376018/java/java/Image-Fetcher-Threads  http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

答案 3 :(得分:0)

您的JVM的堆空间不足。尝试使用-Xmx切换到JVM以增加程序可用的堆空间量。

java -Xmx256m YourClassName 

答案 4 :(得分:0)

默认情况下,如果没有modifiyin JVM start params,则会有128m的堆空间。

程序分配的内存大于128米。

您可以增加堆空间限制:

java -Xms<initial heap size> -Xmx<maximum heap size>