`
bruce008
  • 浏览: 169906 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 中的常见的内存溢出

    博客分类:
  • J2SE
阅读更多

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 还得向 一哥们求证下。 ( 特此记录下 )  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics