Мы являемся студентами ip 12-го класса. Мы сталкиваемся с этим исключением и не знаем, как его исправить.
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)
Увеличение пространства кучи. Java использует 64MByte heap memory, если не указан более высокий максимум. Запустите ваше приложение так:
java -Xmx128m MyClass
, чтобы иметь 128MByte.
Похоже, вы запускаете приложение в сборке ant. Я бы разделил строительство и исполнение. Позвольте ant создать командный файл, который будет использоваться для запуска приложения.
Теперь вам, возможно, придется увеличить пространство кучи для самого муравья. Это делается с помощью переменной среды (решение показано для окон):
set ANT_OPTS=-Xms512m -Xmx512m
Дополнительная литература
Вы можете установить размер кучи, используя следующие параметры:
-Xms32m -Xmx128m
проверьте параметры VM здесь:
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
Но я предлагаю вам проверить, что потребляет вашу кучу. Вы можете сделать это с помощью инструментов профилирования, таких как:
Другие ответы не являются полными и полными ответами.Они просто пластыри.Основная причина в том, что вы создаете объект ImageIcon, который создает эти потоки в фоновом режиме.У меня была эта проблема также из-за коррумпированных JPG.Не имеет значения, если вы увеличите объем памяти до 1 терабайта, если пользователь загрузит испорченное изображение, это может привести к потере всего.Вместо этого используйте 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
По умолчанию, без изменения параметров запуска JVM, у вас есть 128 м пространства кучи.
Объем памяти, выделенный вашей программой, превышает 128 м.
Вы можете увеличить пределы пространства кучи:
java -Xms<initial heap size> -Xmx<maximum heap size>
Ваша JVM исчерпала пространство кучи. Попробуйте использовать переключатель -Xmx для JVM, чтобы увеличить объем кучи, доступный вашей программе.
-Xmx
java -Xmx256m YourClassName