public Map<String, Object> checkWithIn(Map<String, Object> params, boolean flag) { InputStream in = (InputStream) MapUtils.getObject(params, "in"); Map<String, Object> resMap = new HashMap<String, Object>(); BufferedInputStream bis = null; ByteArrayOutputStream fos = null; ByteArrayInputStream bai = null; byte[] buffer = new byte[NumberConstant.CHANGESIZE]; int len = 0; int maxsize = NumberConstant.TWO * NumberConstant.CHANGESIZE * NumberConstant.CHANGESIZE; String picDesc = MapUtils.getString(params, SpsConstant.PIC_DESC, ""); String prevName = MapUtils.getString(params, "prevName", ""); try { bis = new BufferedInputStream(in); fos = new ByteArrayOutputStream(SpsConstant.SIZECHANGE); // 校验图片大小 while (-1 != (len = bis.read(buffer))) { fos.write(buffer, 0, len); if (fos.size() >= maxsize) { resMap.put("error_mes", "size_over"); resMap.put(SpsConstant.PIC_DESC, prevName); return resMap; } } byte[] content = fos.toByteArray(); //业务代码... } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); resMap.put(SpsConstant.PIC_DESC, picDesc); } finally { close(bis, fos, bai, resMap); fos = null; bis = null; bai = null; } return resMap; }
private void close(BufferedInputStream bis, ByteArrayOutputStream fos, ByteArrayInputStream bai, Map<String, Object> resMap) { if (null != fos) { try { fos.close(); } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); } } if (null != bis) { try { bis.close(); } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); } } if (null != bai) { try { bai.close(); } catch (IOException e) { resMap.put(ERROR_MES, EXCEPTION); } } }
文件上传的代码啊,没有多少东西啊。。为什么放到生产环境上就会OOM啊。大神给指点下呢,我知道这个方案不是很好,应该在框架上或者前段来判断文件大小,但是现在不能有太多的代码改动,先分析出来问题哈。。。。
压测没有问题,我本地各种线程并发都试过,没出现问题啊。。为什么生产上就会有这个问题呢?
报OOM的就是
byte[] content = fos.toByteArray();
,fos太大??不合理啊?
理论上如果很大的话上面循环的时候有判断啊,现在没有走上面的,但是下面OOM了,finally也释放了啊。请大神指点~~~
相关推荐
JVM 内存溢出问题解析 JVM 内存溢出是指程序运行所需的内存大于虚拟机能提供的最大内存的情况。这种情况可能是由于数据量过大、死循环、静态变量和静态方法过多、递归、无法确定是否被引用的对象等原因引起的。同时...
内存溢出问题可以从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决。 从程序类方面来说,内存溢出的原因有很多,以下是常见的几种: 1、查询数据库的时候递归循环了,应尽量使用精简的关联 SQL ...
内存溢出配置是IT行业中,尤其是在Java应用开发与运维领域中的一个重要话题,它涉及到系统资源管理、性能调优以及故障排查等多个方面。标题与描述中重复提到“内存溢出配置”,这表明了对这一主题的关注与重视。接...
内存溢出问题在Java开发中是一个常见的问题,尤其是在使用集成开发环境如MyEclipse时,由于资源消耗较大,可能会频繁出现。本文主要讨论如何解决MyEclipse中的内存溢出问题以及相关的Java内存管理知识点。 首先,...
在软件开发领域,尤其是涉及到数据库应用的场景下,内存泄漏(Memory Leak)和内存溢出(Out of Memory,简称OOM)是两个常见的问题,它们直接影响到程序的性能、稳定性和可扩展性。以下是对这两个概念及其相关知识...
Qt作为一个流行的C++图形用户界面库,提供了丰富的功能,但同时也需要开发者正确地管理内存以避免可能导致程序崩溃或数据损坏的内存溢出问题。本文将深入探讨Qt内存溢出检测,以及如何借助Visual Leak Detector (VLD...
在Java开发中,处理大型Excel文件时,可能会遇到内存溢出的问题。这通常是由于Java的默认内存设置不足以处理大量数据导致的。本解决方案主要针对使用Apache POI库进行Excel读取时遇到的这类问题。 首先,Apache POI...
在Android开发中,处理`Bitmap`内存溢出问题是一个常见的挑战,尤其是在处理高分辨率或大尺寸图片时。当应用程序尝试加载或操作一张超出虚拟机内存预算的`Bitmap`时,系统会抛出`java.lang.OutOfMemoryError: bitmap...
本篇文章将深入探讨Android内存管理的两个核心概念:堆(Heap)和栈(Stack),以及如何理解和解决Android内存溢出问题。 1. 堆与栈 堆和栈是Java虚拟机(JVM)中的两种主要内存区域,它们各自具有特定的用途和...
在编程领域,内存管理是至关重要的,特别是在处理大文件时,如何有效防止内存溢出是开发者需要关注的核心问题。易语言是一种以中文编程为特色的编程环境,它为初学者提供了友好的界面和易于理解的语法。在这个场景下...
### MyEclipse内存溢出问题解析与解决策略 #### 一、问题背景 在使用MyEclipse集成开发环境(IDE)进行项目开发时,开发者可能会遇到内存溢出的问题。这通常表现为应用程序运行过程中突然出现错误提示,导致程序...
内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出产生原因多种多样,当内存严重不足时,内核...
PIO 导入大量数据时的解决内存溢出问题 PIO 是一个 Java 库,用来读取和写入 Microsoft Office 文档,如 Excel、Word 等。然而,在导入大量数据时,PIO 经常会出现内存溢出的问题。这种情况下,我们需要找到一种...
本文将详细介绍如何在不同环境下解决Maven构建过程中出现的内存溢出问题。 #### 二、内存溢出原因分析 在深入探讨解决方案之前,我们需要先理解为何会出现内存溢出的情况。通常情况下,Maven构建过程中的内存溢出...
在处理Java内存溢出问题时,除了使用上述工具外,还需要理解以下几个关键概念: 1. 堆内存:Java对象主要存储在堆内存中,过大或过多的对象可能导致堆溢出。 2. 非堆内存:包括JVM自身使用的内存(如方法区、元空间...
在处理高并发或者大型应用时,内存管理是关键问题,而"内存溢出"则是一个常见的性能瓶颈。内存溢出(Out of Memory,OOM)通常发生在系统无法分配足够的内存给程序运行时,这可能导致服务器崩溃或性能急剧下降。 ...
在实际使用过程中,可能会遇到内存溢出(Memory Overflow)的问题,这通常是由于邮件处理不当或资源管理不善导致的。本篇文章将深入探讨 JavaMail 中内存溢出问题的成因、解决策略以及相关源码分析。 一、内存溢出...
虽然Python有内置的垃圾回收机制,但仍然可能出现内存泄漏和内存溢出的问题,影响程序的稳定性和效率。 **一、Python内存泄漏** 内存泄漏通常是由于以下几个原因引起的: 1. **C扩展模块的内存泄漏**:使用C语言...
### Eclipse Tomcat 启动时出现内存溢出问题解析及解决方法 #### 一、问题背景与概述 在使用Eclipse集成开发环境部署并运行基于Tomcat的应用程序时,经常会出现“java.lang.OutOfMemoryError: Java heap space”这...