HashMap会造成内存泄露吗?什么情况?有什么解决办法呢?
1. 会的,当在一些缓存场景下,在缓存中通常会将对象作为键存储,当该对象不在被使用时,但是由于强引用的存在(map.put(对象,值)),其对应的键却无法从缓存中移除,从而导致内存泄露。
HashMap map = new HashMap();
Person person = new Person("张三",23);
map.put(person, 'haha');
如果此时对象不在被使用:person = null;
但是JVM还是不会被回收,因为它还被HashMap的键给强引用着,所以persson这个对象不会被回收。
2. 解决:
可以使用WeakHashMap,其使用的是弱引用,可以允许JVM在合适的时机回收这些键所对应的对象。
实际中使用WeakHashMap需要注意什么???![[谢谢]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_112.2dd347d.png)
1. 会的,当在一些缓存场景下,在缓存中通常会将对象作为键存储,当该对象不在被使用时,但是由于强引用的存在(map.put(对象,值)),其对应的键却无法从缓存中移除,从而导致内存泄露。
HashMap map = new HashMap();
Person person = new Person("张三",23);
map.put(person, 'haha');
如果此时对象不在被使用:person = null;
但是JVM还是不会被回收,因为它还被HashMap的键给强引用着,所以persson这个对象不会被回收。
2. 解决:
可以使用WeakHashMap,其使用的是弱引用,可以允许JVM在合适的时机回收这些键所对应的对象。
实际中使用WeakHashMap需要注意什么???
![[谢谢]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_112.2dd347d.png)
展开
评论
7