Effective Java (6) 消除过期的对象引用

来源:互联网 发布:淘宝联盟app推广 编辑:程序博客网 时间:2024/05/21 15:25

不要总以为Java会百分之百的回收垃圾对象,所以可以丝毫不顾忌垃圾回收。Java在对象被引用的情况下,是不会将对象回收的。

最常见的例子,就是当一个数组对象中的元素,如果数组没有被清除,那么数组中的元素就不会被回收。极端情况下,这些元素会一直增长,造成内存泄露直到内存溢出。所以在这样的情况下,显示的将元素设置为null是必要的。

另一个内存泄露的常见来源是缓存。程序将对象放入缓存,然后就遗忘了其存在。可以使用WeakHashMap来解决这样的问题,也可以对缓存对象设置生命周期,在过期以后,回收对象。另外,设置缓存池大小也是一个解决的方法,如Ibatis的LRU缓存。

第三个内存泄露的常见来源是监听器及回调。客户端注册了回调,却没有显示取消,则这些监听会积聚,发生内存溢出。
防止内存泄露最佳的时间,往往是编写代码时。因为在发生内存泄露之后,检查往往只有费时费力通过代码检查或者Heap剖析工具差错。现对而言,防患于未然才是最佳的选择。

0 0