Java中的内存管理
要了解Java中的内存泄漏,首先就得知道Java中的内存是如何管理的。
在Java程序中,我们通常使用 new 为对象分配内存,而这些内存空间都在堆上。
Java判断对象是否可以回收使用的而是可达性分析算法。
这个算法的基本思路就是通过一系列名为 "GC Roots" 的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是不可用的,下图对象 object5, object6, object7 虽然有互相判断,但它们到 GC Roots 是不可达的,所以它们将会判定为是可回收对象。
在 Java 语言中,可作为 GC Roots 对象的包括如下几种:
虚拟机栈(栈帧中的本地变量表)中引用的对象
本地方法栈(Native方法)中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
什么是Java中的内存泄漏
Java 中的内存泄漏,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄漏。
Java 中的内存泄漏与 C++ 中的表现有所不同。
在 C++ 中,所有被分配了内存的对象,不再使用之后