Java的垃圾回收机制:强制回收System.gc() Runtime.getTime().gc()

垃圾回收

当引用类型的实体,如对象、数组等不再被任何变量引用的时候。这块占用的内存就成为了垃圾。JVM会根据自己的策略决定是回收内存

注意:

  1. 垃圾回收只回收内存中的对象,无法回收物理资源(数据库连接,网络IO等)
  2. 程序无法精确的控制台垃圾回收的运行,垃圾回收汇总任何时候进行,系统自动。
  3. 在垃圾回收机制回收任何对象之前总会调用他的finalize()方法。

对象在内存中的三种状态:

  1. 可达状态:对象有变量再引用。
  2. 可恢复状态:如果一个对象没有任何变量引用它,但是调用了finalize()后又有新的变量引用了对象,中间的状态为“可恢复状态”。
  3. 不可达状态:对象没有变量引用,并且重新调用了finalize()方法后,还没有变成可达状态,就变为不可达状态,系统开始回收资源。

强制垃圾回收System.gc() Runtime.getRuntime.gc()

复制代码
package com.zmd.study.rubbish;

import javax.naming.Name;

/**
 * @ClassName RubbishTest
 * @projectName: object1
 * @author: Zhangmingda
 * @description: 测试干预垃圾回收
 * date: 2021/4/6.
 */
public class RubbishTest {
    private String name;
    //构造方法
    public RubbishTest(String name) {
        this.name = name;
    }

    //重写finalize增加输出便于观察是否自动回收了对象
    @Override
    protected void finalize() throws Throwable {
        System.out.println(name + "要被回收了");
        super.finalize();
    }
    //测试创建多个对象,看垃圾有没有自动回收
    public static void main(String[] args) {
        for(int i=0;i<1000; i++) {
            new RubbishTest("name" + i);
            System.out.println("循环打印" + "name" + i);
            //强制垃圾回收,当没有变量引用上面new出来的对象,就会调用finalize()方法回收内存
            System.gc();
//
Runtime.getRuntime().gc();
} } }
复制代码

 

posted on   zhangmingda  阅读(1282)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示