网站开发jquery,漳州城乡住房建设部网站,端子网站建设,研发小程序成本转载自 Java内存泄漏介绍内存管理是Java最重要的优势之一#xff0c;你只需创建对象#xff0c;Java垃圾收集器会自动负责分配和释放内存。但是#xff0c;情况并不那么简单#xff0c;因为在Java应用程序中经常发生内存泄漏。本章会说明什么是内存泄漏#xff0c;为什么发…转载自 Java内存泄漏介绍内存管理是Java最重要的优势之一你只需创建对象Java垃圾收集器会自动负责分配和释放内存。但是情况并不那么简单因为在Java应用程序中经常发生内存泄漏。本章会说明什么是内存泄漏为什么发生以及如何防止它们。什么是内存泄漏
内存泄漏的定义应用程序不再使用的对象垃圾收集器却无法删除它们因为它们正在被引用。为了理解这个定义我们需要了解对象在内存中的状态。下图说明了什么是未引用的什么是引用的对象。从图中可以看出有被引用的对象和未被引用的对象。未引用的对象将被垃圾收集而被引用的对象将不会被垃圾收集。未引用的对象肯定是未使用的因为没有其他对象引用它。但是未使用的对象并不是全部未被引用其中一些被引用这是内存泄漏的来源。为什么内存泄漏发生
让我们来看看下面的例子看看为什么发生内存泄漏。在下面的例子中对象A是指对象B。A的生命周期t1 - t4比B的t2 - t3长得多当应用中不再使用B时A仍然有一个B的引用这样垃圾收集器就不能从内存中删除B。这就可能会导致内存不足的问题因为如果A同时为更多的对象做同样的事情那么会有很多像B这样的对象没有收集并占用内存空间。B也可能拥有一堆其他对象的引用B引用的对象也不会被收集。所有这些未使用的对象将消耗宝贵的内存空间。如何防止内存泄漏
以下是防止内存泄漏的一些快速实用技巧。注意集合类如HashMap、ArrayList等因为它们是发现内存泄漏的常见地方。当它们被声明为静态时它们的生命时间与应用程序的生命时间是相同的。注意事件监听器和回调。如果一个侦听器被注册了但是当类不再被使用时可能会发生内存泄漏。如果一个类管理自己的内存程序应该对内存泄漏保持警惕。通常情况下指向其他对象的成员变量需要为null值。思考为什么JDK 6中的substring方法会导致内存泄漏