业务上有一个缩放图片的操作使用了BufferedImage,但是经常发现生成图片失败。查看日志显示OutOfMemoryError: Java heap space,内存溢出错误。通过获取java hprof来分析,发现大部分内存被BufferedImage占用。难道生成缩略图后,没有自动释放?

答案是的,当释放图片后,再没有发生过OutOfMemoryError。看看如下代码:

* 生成缩略图写入输出流 * @throws IOException public void toOutputStream(OutputStream out) throws ImageResizeException { BufferedImage source = null; try { source = ImageIO.read(file); if (source == null) { throw new ImageResizeException("无法加载原始图片"); //这里省略对图像进行处理 ImageIO.write(source , "PNG", out); } catch (IOException ex) { throw new ImageResizeException(ex.getMessage()); } finally { if (source != null) { source.getGraphics().dispose(); 业务上有一个缩放图片的操作使用了BufferedImage,但是经常发现生成图片失败。查看日志显示OutOfMemoryError: Java heap space,内存溢出错误。通过获取javahprof来分析,发现大部分内存被BufferedImage占用。难道生成缩略图后,没有自动释放?答案是的,当释放图片后,再没有发生过OutOfMemoryError。看看如下代码: /**...
事件起因与一个简单应用经常发生Young GC,甚至在没有请求量的情况下也经常发生GC (Allocation Failure),后来 使用 mat工具进行分析,发现mysql连接相关的class居然占了40%+堆内空间。才发现spring boot的连接池大小没有配置,默认是10个连接,但实际上该应用不需要这么多。 The class "com.mysql.cj.jdbc.AbandonedCo...
近期 使用 ImageIO对象生成图片的缩略图功能,无论图片大小,总是会报出以下异常信息: Caused by: java .lang. OutOfMemoryError : Java heap space at java .awt.image.DataBufferByte.(Unknown Source)         at java .awt.image.ComponentSampl
搜集整理关于 java 错误处理: java .lang. OutOfMemoryError : Java heap space java .lang. OutOfMemoryError : Java heap space
日志记录会消耗性能,但当出现 问题 的时候,日志又能够帮助我们快速 解决 问题 。那么如何提高打日志的性能呢?在 使用 logback的时候,推荐 使用 AsyncAppender异步记录日志。 1)logback设置AsyncAppender 要注意AsyncAppender异步记录ILoggingEvents,它仅充当事件分派器,因此必须引用另一个appender才能执行任何有用的操作。 <con...
2. 逐行读取和处理图片,避免一次性读取整个图片。 3. 使用 Java Advanced Imaging (JAI)库来处理大型图片,它可以有效地处理大型图片,同时减少内存 使用 。 4. 增加 Java 虚拟机的内存限制,可以通过在启动命令中 使用 “-Xmx”参数来设置 Java 虚拟机内存上限。 希望这些方法能够帮助你 解决 BufferedImage 内存溢出 问题