新手入门Jvm--Jvm垃圾回收
什么是Jvm
Jvm全称是Java虚拟机,它是一个运行Java字节码的虚拟机软件。它负责解释和执行Java代码,并提供各种服务,如垃圾回收、内存管理和安全等。Jvm通过将字节码解释成可执行的机器指令来执行Java应用程序,使得Java程序具有跨平台的能力。
垃圾回收
一般的程序运行结束后,系统会自动释放它所占用的内存资源,但由于Java程序不可避免地会使用动态分配内存的方式创建对象,而这些对象需要垃圾回收器进行回收后释放内存。为了防止内存泄露和释放内存空间,Java虚拟机(Jvm)提供了垃圾回收机制。
Jvm中的垃圾回收机制主要通过标记-清除、复制算法、标记-整理等方式进行实现。其中标记-清除算法将堆空间划分为已使用和未使用两部分。在垃圾回收时,垃圾收集器首先标记所有活动对象,并将未标记的对象划分为垃圾对象,然后对垃圾对象进行回收。
常见的Jvm垃圾回收算法
1. 标记-清除算法
标记-清除算法是一种基本的垃圾回收算法,它将堆空间分为已使用和未使用两部分。当垃圾回收器进行垃圾回收时,首先遍历所有可达对象,将其标记为活动对象,然后将未标记的对象划分为垃圾对象,对垃圾对象进行回收。
2. 复制算法
复制算法将堆空间划分为两个半空间,每次只使用一个半空间。当这个半空间用完之后,将活动对象拷贝到另一个半空间中,然后将原来的半空间清空,这样反复交替使用,可以得到高效的空间回收。
3. 标记-整理算法
标记-整理算法相对于标记-清除算法,多了一步整理过程,将存活的对象向一端移动,然后将堆中的所有垃圾对象清理掉,这样就可以在一定程度上避免出现内存碎片,从而减少了程序的内存开销。
示例说明
示例1
public class Test {
public static void main(String[] args) {
Object obj = new Object();
// obj指向了另一个对象
obj = new Object();
// obj现在指向了null,原始的对象成为了垃圾对象
obj = null;
}
}
在这个示例中,我们创建了一个对象obj,然后再创建另一个对象,并让obj指向了这个新对象。然后我们又将obj指向了null,原始的对象成为了垃圾对象,需要垃圾回收器进行回收。
示例2
public class Test {
public static void main(String[] args) {
Object[] objArr = new Object[10000];
for (int i = 0; i < objArr.length; i++) {
objArr[i] = new Object();
}
// objArr中的10000个对象都成为了垃圾对象,需要垃圾回收器进行回收
objArr = null;
}
}
在这个示例中,我们创建了一个长度为10000的对象数组objArr,使用循环创建了10000个Object对象并将它们存储在数组中。然后我们将objArr置为null,此时数组中的10000个对象都成为了垃圾对象,需要垃圾回收器进行回收。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:新手入门Jvm–Jvm垃圾回收 - Python技术站