
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
一个内存泄露的例子:一个用数组实现的Stack,依靠size标记来管理栈的深度,但是这样从栈中弹出来的过期对象并没有被释放.
称内存泄露为"无意识的对象保持(unintentional object retention)"更为恰当.
修复方法:一旦对象引用已经过期,只需清空这些引用即可.
清空对象引用应该是一种例外,而不是一种规范行为.消除过期引用最好的方法是让包含该引用的变量结束其生命周期.如果你是在最紧凑的作用域范围内定义变量,这种情形就会自然发生.
一般而言,只要类是自己管理内存,程序员就应该警惕内存泄露问题.一旦元素被释放掉,则该元素中包含的任何对象引用都应该被清空.
内存泄露的另一个常见来源是缓存.这个问题有这几种可能的解决方案:
1.缓存项的生命周期由该键的外部引用决定-> WeakHashMap;
2.缓存项的生命周期是否有意义并不是很容易确定->随着时间的推移或者新增项的时候删除没用的项.
内存泄露的第三个常见来源是监听器和其他回调.
如果你实现了一个API,客户端注册了回调却没有注销,就会积聚对象.
API端可以只保存对象的弱引用来确保回调对象生命周期结束后会被垃圾回收.
了解详情请登陆昆明达内IT培训官网(km.tedu.cn)!