Selevt中内存清理

北海01 2015-06-11 09:22:48
在实际项目中需要向服务器上上传文件,但是tomcat将上传的文件解析为2进制数组后,tomcat内存增长很快。我做了测试发现当在servlet中穿件对象时,这个内存就会增加比如:
public class Query extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StringBuffer buffer = new StringBuffer();
for(int i=0;i<1000000;i++){
buffer.append("hello");
}
buffer.replace(0, buffer.length()-1, "");
System.gc();
}

}
当访问这个Servlet时tomcat内存会增大30M左右,这个怎么处理,求助,先谢谢啦
...全文
320 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
北海01 2015-06-18
  • 打赏
  • 举报
回复
@xuanming25 我不太懂“会导致大量数据进行旧生代”,你的意思是以后这个内存会会降下来吗
驴小黑 2015-06-17
  • 打赏
  • 举报
回复
原因是循环一百万次,会导致大量数据进行旧生代,垃圾回收后内存会下来。建议不要这样使用
oh_Maxy 2015-06-16
  • 打赏
  • 举报
回复
引用 5 楼 u012816142 的回复:
@oh_Maxy 好像也没什么效果啊,;我是这么看内存的,不知道准不准,按你说的清理后这个内存变化和没清理时一样的
那就想办法分段处理的数据吧! 比如原先100w一批处理的,降低到10w一批处理数据。
二十亩鱼 2015-06-16
  • 打赏
  • 举报
回复
你循环写入内存100万次,你说内存吃紧不?各什么系统都受不了,内存吃紧是正常现象,不过生产中没有这么干的。
北海01 2015-06-16
  • 打赏
  • 举报
回复
@u010582851 我不知道这个该怎么清理,我想就是内存怎么能下去呢
北海01 2015-06-16
  • 打赏
  • 举报
回复
@oh_Maxy 好像也没什么效果啊,;我是这么看内存的,不知道准不准,按你说的清理后这个内存变化和没清理时一样的
悠游妖 2015-06-12
  • 打赏
  • 举报
回复
可以分批上传,批次处理,然后及时清理,避免内存占用峰值过大就行
oh_Maxy 2015-06-12
  • 打赏
  • 举报
回复
引用 2 楼 u012816142 的回复:
@oh_Maxy 这个导入文件的问题我已经解决利用的是commons-fileupload-1.3.1jar包。但是这个字符串不清理我不知道该怎么处理,不知道当用户多了内存就会消耗严重呢,这是jvm还是tomcat问题呢
如果真的存在这样超大的buffer,可以用buffer.setLength(0)来处理。如果是list或map,用clean操作一下。
北海01 2015-06-11
  • 打赏
  • 举报
回复
@oh_Maxy 这个导入文件的问题我已经解决利用的是commons-fileupload-1.3.1jar包。但是这个字符串不清理我不知道该怎么处理,不知道当用户多了内存就会消耗严重呢,这是jvm还是tomcat问题呢
oh_Maxy 2015-06-11
  • 打赏
  • 举报
回复
内存里真实有这么大的数组或者字符串,是少不了的。 文件操作可以用Buffer技术,限制每次读取的字节个数,来限制内存占用量。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧