Java内存泄漏的介绍 java内存泄漏怎么处理
Java的最大优势之一是其内存管理。您只需创建对象,Java Garbage Collector便会分配和释放内存。但是,情况并非如此简单,因为Java应用程序中经常发生内存泄漏。
本教程说明什么是内存泄漏,为什么发生以及如何防止它们。
1.什么是内存泄漏?
内存泄漏的定义:应用程序不再使用对象,但是垃圾回收器无法删除它们,因为它们已被引用。
2.为什么会发生内存泄漏?
让我们看下面的示例,看看为什么发生内存泄漏。在下面的示例中,对象A引用了对象B。A的生存期(t1-t4)比B的生存期(t2-t3)长得多。当应用程序中不再使用B时,A仍保留对它的引用。这样,垃圾收集器无法从内存中删除B。这可能会导致内存不足的问题,因为如果A对更多对象执行相同的操作,则将有很多对象未被收集并占用内存空间。
B也可能持有其他对象的一堆引用。B引用的那些对象也不会被收集。所有那些未使用的对象将消耗宝贵的内存空间。
3.如何防止内存泄漏?
以下是一些快速动手技巧,可防止内存泄漏。
1. 注意Collection类,例如HashMap,ArrayList等,因为它们是查找内存泄漏的常见位置。声明它们后static,它们的生存时间与应用程序的生存时间相同。
2. 注意事件监听器和回调。如果不再使用该类时,如果注册了侦听器但未注销,则可能会发生内存泄漏。
3. “如果一个类管理自己的内存,则程序员应该对内存泄漏发出警报。” [1]通常,指向其他对象的对象成员变量必须为空。
4.小测验:为什么JDK 6中的substring()方法会导致内存泄漏?
要回答这个问题,您可能需要阅读JDK 6和7中的Substring()。
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。