业务上有一个缩放图片的操作使用了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
内存溢出
的
问题
。