zoukankan      html  css  js  c++  java
  • 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();
    } } }

  • 相关阅读:
    【IIS错误】IIS各种错误
    【IIS错误
    【C#】C#操作Excel文件(转)
    【C#】语音识别
    【IIS错误】未能加载文件或程序集“AAAAA”或它的某一个依赖项。试图加载格式不正确的程序。
    【Web前端】清除css、javascript及背景图在浏览器中的缓存
    【模态窗口-Modeldialog】提交请求时禁止在新窗口打开页面的处理方法
    第八周学习进度表
    梦断代码阅读笔记01
    第二阶段冲刺第七天
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14620244.html
Copyright © 2011-2022 走看看