Java 中的常见的内存溢出

1,   最常见的Java 中的内存溢出就是 一下静态的容器  HashMap,  List 之类的容器了。 由于是静态的的容器它们的生命周期就是创建之后就跟jvm 相同。 因此它们里面的object 们也会被他们hold 住,  即使别的地方都已经用完了, 如果没有显示的从他们这移除, 那些object 也会永远存在。    如果是这种容器的作用是作为cache 的话 还是用 memcache 来完成吧。   绝大多数的cache 容器是使用 SoftReference 来hold 住 target object的。 SoftReference refer 的对象如果在别的地方没有被引用了,  在GC 做 full collection 的时候会回收这些对象的。

 

 

2, 是一样事件处理的地方 我们会add Some listener 。 通常我们都是只记得加 不记得 un register。 这样在加的地方 对象用完了 但是 被监听的对象 还在的话。 listen 的对象也不会被 释放。 这个情况在dotNet 下面, 特别当初做 win form的时候很郁闷啊,  一个winform 程序在那个时候 占个 1,200m 内存。 在 05,06   512m内存都是大的了。 最后发现很多控件没有释放掉就是这种原因,  搞得还骂微软,  到了 java 世界也有这个问题。  好像现在dotNet 都是在处理这种delegate 的时候用到  softreference 了。  到底是用到 soft reference  还是 weak reference 还得向 一哥们求证下。 ( 特此记录下 )  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值