JVM—标记清除算法

JVM标记清除算法是一种垃圾回收算法,它通过两个步骤来回收内存:

  1. 标记:标记所有被使用的内存。

  2. 清除:清除所有未被标记的内存。

下面是一个使用Java代码演示的例子:

public class MyClass {
    private static final int MB = 1024 * 1024;

    public static void main(String[] args) {
        // 创建一个大型数组
        Integer[] array = new Integer[500 * MB];
        
        // 循环遍历数组并随机赋值,这会生成许多不需要的临时对象
        for (int i = 0; i < array.length; i++) {
            array[i] = Double.valueOf(Math.random());
        }

        // 将数组置为空,以便触发jvm的垃圾回收
        array = null;
        
        // 为了让垃圾回收有足够的时间清除不需要的对象,我们暂停程序一段时间
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 手动调用垃圾回收器
        System.gc();
    }
}

在这个例子中,我们创建了一个大型数组,并随机给它赋值。由于我们使用了包装类Double来封装double类型的值,因此这个过程会生成一些不需要的临时对象。当数组置为null时,这些临时对象和未被使用的数组元素都变成了不可达对象。在暂停一段时间之后,我们手动调用了System.gc()方法来触发JVM的垃圾回收。JVM将遍历并标记所有可达的对象,并清除所有不可达对象。这个例子演示了标记清除算法在内存清理方面的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值