• Java 垃圾回收机制


    垃圾回收是Java程序设计汇总内存管理的核心概念。

    JVM的内存管理机制被称为垃圾回收机制,它负责自动回收那些无用对象所占用的内存。

    对象什么时候称为垃圾(强引用)

    一个对象创建后被防止在JVM的堆内存中,只有当对象不在被程序中的任何引用变量引用时,他的内存才可能被回收。

    当垃圾回收器将要回收无用对象的内存时,先调用该对象的 finalize() 方法,该方法有可能使对象复活,导致垃圾回收器取消回收该对象的内存。

    JVM的垃圾回收操作对程序来说都是透明的。因此程序无法预料某个无用对象的 finalize() 方法何时被释放。

    finalize() 方法的特点:

    垃圾回收器是否会执行该方法,何时执行该方法,都是不确定的。

    finalize() 方法有可能使对象复活,使它恢复到可触及状态。

    垃圾回收器在执行 finalize() 方法时,如果出现异常,垃圾回收器不会报告异常,程序继续正常运行。

    垃圾回收器作为低优先级线程独立运行,在任何时候,程序都无法迫使垃圾回收器立即执行垃圾回收操作。

    程序中可调用的 System.gc() 或 Runtime 中的 gc() 方法提示垃圾回收器尽快执行垃圾回收操作,但是不能保证调用后垃圾回收器会立即执行垃圾回收。

    垃圾回收机制可以有效防范动态内存分配中可能发生的两个危险:

    因内存垃圾过多而引发的内存耗尽,不恰当的内存释放所造成的内存非法引用。

    public class GCTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new People();    //匿名对象,用完一次就被回收
    
            //第一种方法
            System.gc();//提示垃圾回收器尽快回收对象所占用的内存
            
            //第二种方法
    //        Runtime r = Runtime.getRuntime();
    //        r.gc();//提示垃圾回收器尽快回收对象所占用的内存
        }
    }
    public class People {
        //属性:成员变量
        public String name;//默认为null
        public char sex;//默认为'u0000'(空字符)
        public int age;//默认为0
        
        //在Object类中定义的方法,在对象被回收前调用
        protected void finalize() throws Throwable {
            super.finalize();
            System.out.println("对象被回收");
        }
    }
  • 相关阅读:
    2018年全国多校算法寒假训练营练习比赛(第二场)F
    牛客练习赛2 A
    牛客练习赛1 C
    牛客练习赛1 B
    vb编程代码大全
    javascript编程代码笔记
    391.FANUC宏程序编程
    宏程序编程实例,简单易懂
    Java类与类之间的关系详细介绍
    C++虚继承时的构造函数的讲解
  • 原文地址:https://www.cnblogs.com/lialong1st/p/7864906.html
Copyright © 2020-2023  润新知