zoukankan      html  css  js  c++  java
  • 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("对象被回收");
        }
    }
  • 相关阅读:
    HTML 语义化标签-新增标签介绍
    HTML基础知识点
    Android JSON 解析关键代码
    [USACO16DEC]Cities and States省市
    [洛谷P1835]素数密度
    [洛谷P1168]中位数
    [HNOI2008]越狱
    [HAOI2007]上升序列
    [SHOI2009]Booking 会场预约
    [洛谷P1892][codevs2597]团伙
  • 原文地址:https://www.cnblogs.com/lialong1st/p/7864906.html
Copyright © 2011-2022 走看看