前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【错误记录】运行 Java 程序报错 ( Exception in thread “Image Fetch“ java.lang.OutOfMemoryError: Java heap space )

【错误记录】运行 Java 程序报错 ( Exception in thread “Image Fetch“ java.lang.OutOfMemoryError: Java heap space )

作者头像
韩曙亮
发布2024-04-20 08:40:20
1530
发布2024-04-20 08:40:20
举报

一、报错信息

运行 从 Intellij IDEA 中导出的程序 , 报如下错误 :

代码语言:javascript
复制
D:\map_zkhw>java -jar TrunkScheduling.main.jar
Exception in thread "Image Fetcher 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 sun.awt.image.ImageRepresentation.createBufferedImage(Unknown Source)
        at sun.awt.image.ImageRepresentation.setPixels(Unknown Source)
        at sun.awt.image.ImageDecoder.setPixels(Unknown Source)
        at sun.awt.image.JPEGImageDecoder.sendPixels(Unknown Source)
        at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
        at sun.awt.image.JPEGImageDecoder.produceImage(Unknown Source)
        at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
        at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
        at sun.awt.image.ImageFetcher.run(Unknown Source)

二、错误分析

出现

代码语言:javascript
复制
Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space

错误 , 就意味着 Java 虚拟机 的堆内存区域不足 , 突然加载一张大图片 , 无法为 图片对象 在堆内存中分配内存空间 , 此时就会抛出 " Java heap space " 这个错误 ;

我加载的是一张 50M 左右的 地图图片 , 图片很大 ;

如果 在 程序中存在内存泄漏 , 一些大的数组 / 集合 / 数据对象 始终没有释放 , 会在运行的过程中 , 报该错误 ;

三、解决方案 - 针对内存不足问题

针对内存不足的问题 , 直接通过增加堆内存大小的方式解决 , 调整 Java 虚拟机 的 启动参数 增加堆内存的大小 ;

  • -Xms<size> 参数 可以设置 Java 虚拟机 起始堆大小 ;
  • -Xmx<size> 参数 可以设置 Java 虚拟机 最大堆大小 ;

下面的命令中 , 运行 jar 包 , 在命令中添加了 -Xms512m 参数 , 设置 JVM 起始堆大小 512M , 通过 -Xmx1024m 参数 设置最大堆大小 1024M ;

代码语言:javascript
复制
java -Xms512m -Xmx1024m -jar jar包名称

如果内存还是不足 , 则将最大堆设置为 2048M ;

代码语言:javascript
复制
java -Xms512m -Xmx2048m -jar jar包名称

四、解决方案 - 针对内存泄漏

如果 是由于 内存泄漏 导致的 在运行过程中 报出

代码语言:javascript
复制
Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space

错误 , 就需要检查代码中 的 内存泄漏 点 , 找出 哪些对象未能及时释放 , 或者无效的对象保留太久导致的内存堆积 ;

使用 如下 内存分析工具 , 查找内存泄漏 :

  • VisualVM
  • JProfiler
  • Eclipse Memory Analyzer (MAT)

找到内存泄漏的 对象后 , 针对没有回收的对象进行修复 , 及时清理不再使用的 数组 / 集合 / 数据对象 等占用大量内存的对象 ;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、报错信息
  • 二、错误分析
  • 三、解决方案 - 针对内存不足问题
  • 四、解决方案 - 针对内存泄漏
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档