程序中的char[]越来越多,求助!

gyhanhai 2013-01-23 10:08:25
tomcat的web程序跑3,4天老是内存耗尽,卡的时候也不报内存溢出,就特别慢,卡的时候查看了一下,char[]类的数量特别多,占了一类大小的一半,求各位帮帮忙。我程序中用了很多split,会不会有影响啊
...全文
214 9 点赞 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gyhanhai 2013-01-24
7楼兄弟,你说的那些已经加上了哈
  • 打赏
  • 举报
回复
ylovep 2013-01-24
我程序中用了很多split,会不会有影响啊 用 StringUtil.split提供的api
  • 打赏
  • 举报
回复
suciver 2013-01-23
你在web.xml里面加上几个struts2和spring清除缓存的filter和listener

<!--struts2清理action上下文变量-->
<filter>
    <filter-name>struts2CleanupFilter</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2CleanupFilter</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!-- Spring 刷新Introspector防止内存泄露 -->
<listener>
   <listener-class>org.springframework.web.util.IntrospectorCleanupListener
   </listener-class>
</listener>
  • 打赏
  • 举报
回复
gyhanhai 2013-01-23
先说一下从后台返回数据的方式吧,先从数据库查出数据,装到list<Object[]>里面, //查找记录 Map map = billService.findBillsLv1(model.getPage(),Integer.parseInt(hotelId)); List<CusBillsLV1VO> list = (List) map.get("list"); //返回数据 Map pageInfo = new HashMap(); pageInfo.put("page", model.getPage()); pageInfo.put("total", map.get("total")); List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>(); for (CusBillsLV1VO o : list) { String name = ""; if(null == customerService.getEntry(Long.valueOf(o.getCusId()))){ name = "该客户信息已删除"; }else{ name = customerService.getEntry(Long.valueOf(o.getCusId())).getCusName(); } Map<String, Object> cellMap = new HashMap<String, Object>(); cellMap.put("id", o.getBillsId()); cellMap.put("cell", new Object[] { o.getBillsId(), o.getBillsNo(), name, "已关闭", o.getBillsClass() == 1 ? "房账" : "外账", o.getAddTime().toString() }); mapList.add(cellMap); } pageInfo.put("rows", mapList); Struts2Utils.renderJson(pageInfo, "encoding:UTF-8"); } } 页面用的是flexigrid,用jvisualvm去查看的时候,发现char[]里面的值就是我返回的数据,也就是cellmap里面放的东西,而且还有引用 ,但是那些引用基本都是连接或者缓存,怎么让这些char[]无引用 呢,查询出来的数据都是字符串,为什么char[]还会一直保留着呢,求大神帮帮忙
  • 打赏
  • 举报
回复
林二棍子 2013-01-23
建议将JVM Heap导出成文件,然后用MAT分析一下
  • 打赏
  • 举报
回复
gyhanhai 2013-01-23
涉及到string拼接的大部分都用的是stringBuffer,现在就是不知道原因,好恼火
  • 打赏
  • 举报
回复
suciver 2013-01-23
你不是项目中用太多的String类似 String s="xxxx"; String str="yyyy" s+="yyyy";s+=str; 是不是很多用了这种String的增加操作这个是很吃内存的
  • 打赏
  • 举报
回复
为啥呢 2013-01-23
仅仅是split不会有什么问题,jvm会处理这类问题的,split完了丢尽最终是静态的变量或静态集合对象中才会耗尽内存。你应该查查你的高级的封装类型有哪些是只增不减的。
  • 打赏
  • 举报
回复
xulqif 2013-01-23
当然有影响,建议你对程序进行深度优化
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2013-01-23 10:08
社区公告
暂无公告