常见的java内存问题整理

1、容器类对象或数组对象不清理,特别是静态的容器类或数组对象。主要出现场景是缓存的维护。

2、“重”对象没有显式释放或及时释放,如SWT.Color、SWT.Font;数据库连接;网络连接;IO流对象。大体上是因为此类对象最终调用的是操作系统本地资源,超出了JVM垃圾回收内存管理机制的管辖范围。相对于SWT的Color等对象,SWING的对应对象就不需要主动释放,因为SWING的界面是完全用java技术绘制的,在JVM内存管理范围内。

3、对象的生命周期太长,没有及时释放对无用对象的引用。最常见了。有种情况是addXXXListener()后,在监听的生命周期结束后不调用对应的removeXXXLitener(),多半后面会导致重复调用addXXXListener()多次的情况,当然系统的体现就是越来越慢了。所以A模块调用的B模块的addXXXListener()时,也需要弄清楚B模块是否有removeXXXListener()方法,毕竟addXXXListener()和setXXXListener()是两回事。

4、线程池没资源,有时见到JVM的这种异常报上来或自己设计的线程池没资源了。这很可能是设计问题,对于一个线程运行中可能导致线程中断挂起的异常没有捕获处理,结果线程中断挂起了,线程池维护再不那么智能,很快就会发现无线程可用了。另一种情况是多线程死锁,锁得多了很快也会发现没资源可用了。

5、单线程递归(当然多线程更容易出问题),导致超长的递归栈。

6、大量的字符串操作,很多时候应该用字符串缓冲StringBuffer和StringBuilder

7、内存的永久区不够(jdk7据说没有永久保存区,不知道会是啥样子),见http://lichen0921.iteye.com/blog/451092

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值