一、内存泄漏
- 什么是内存泄露?
无用对象持续占有内存或无用对象内存得不到及时的释放,从而造成内存空间的浪费成为内存泄漏。 易发场景:
a.静态集合类引起内存泄漏:静态类型集合中的对象已被释放但集合本身仍然存活造成集合占有的内存得不到释放。
b.集合中对象属性被修改后,调用remove后无效:public static void main(String[] args) { Set<Person> people = new HashSet<>(3); Person p1 = new Person("aaa", 2, "m"); Person p2 = new Person("bbb", 3, "f"); Person p3 = new Person("ccc", 5, "f"); people.add(p1); people.add(p2); people.add(p3); System.out.println("共有" + people.size() + "个元素"); p3.setAge(20); people.remove(p3); people.add(p3); System.out.println("共有" + people.size() + "个元素"); }
c.释放对象时未释放监听器。
d.数据库连接或网络连接等未释放。
e.单例对象在被初始化后,将在JVM的整个生命周期中存在,如果它持有对外部对象的访问,则外部对象无法所占内存无法被回收。
f.大的String对象调用split方法后产生多个大型String对象。后果:内存被严重消耗,内存溢出。
- 查看内存泄露情况:jmap -histo:live [java进程id]。
最后
以上就是风趣香烟最近收集整理的关于关于Java内存回收机制的全部内容,更多相关关于Java内存回收机制内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复