学习笔记:Java的垃圾回收GC

本文详细介绍了Java中的垃圾回收机制,包括如何使对象符合GC条件,如无效引用、重新分配引用、方法内部创建对象和孤岛。讨论了不可访问对象的重要性,以及如何使对象有资格进行垃圾回收,如在方法内部创建的对象、重新分配引用变量和使引用变量无效。还提到了请求JVM运行Garbage Collector的方法,如Runtime.getRuntime().gc()和System.gc()。
摘要由CSDN通过智能技术生成

 

1、在C/C++中,程序员需要负责对象的创建和销毁。但是有时会忽略无关对象的销毁,由于这种疏忽,有时在创建对象时,可能没有足够的内存,并且整个程序将异常终止,从而导致OutOfMemoryErrors错误。

2、但在Java中,程序员不必担心无用对象的销毁,GC垃圾回收器会自动销毁这些对象。

3、垃圾回收器是Daemon线程的最佳示例,因为它始终在后台运行。

4、垃圾回收器主要目标是通过销毁无法访问的对象来释放堆内存

无法访问的对象:即该对象不存在任何对它的引用,注意,作为隔离岛的一些对象也是不可到达的。

Java中的孤岛:

    在Java中,垃圾回收器模块会小心地销毁对象,并且对它们没有任何引用的对象都可以进行垃圾回收。垃圾收集器能够识别这种类型的对象。
孤岛:

  • 对象1引用对象2,对象2引用对象1。任何其他对象都没有引用对象1和对象2。那是一个孤立的孤岛。
  • 基本上,隔离孤岛是一组互相引用的对象,但是应用程序中的任何活动对象都不会引用它们。严格来说,即使是单个未引用的对象也都是孤立的孤岛。
ublic class Test 
{ 
    Test i; 
    public static void main(String[] args)   
    { 
        Test t1 = new Test(); 
        Test t2 = new Test(); 
           
        // Object of t1 gets a copy of t2 
        t1.i = t2; 
       
        // Object of t2 gets a copy of t1 
        t2.i = t1; 
           
        // Till now no object eligible 
        // for garbage collection  
        t1 = null; 
          
        //now two objects are eligible for 
        // garbage collection  
        t2 = null; 
          
        // calling garbage collector 
        System.gc(); 
         
    } 
  
    @Override
    protected void finalize() throws Throwable  
    {  
        System.out.println("Finalize method called");  
    } 
} 

输出:

Finalize method called
Finalize method called

说明:
销毁对象之前,垃圾收集器最多只能对该对象调用一次finalize方法。
上例中的finalize方法之所以被调用两次是因为两个对象都可以进行垃圾回收。这是因为执行t2=null后我们没有任何外部引用t1和t2对象。
我们只有彼此之间的内部引用(在Test类的实例变量i中)。我们无法调用两个对象的实例变量。因此,无法再次调用任何对象。

Till t2.i = t1 两个对象都具有外部引用t1和t2。
无标题_1

t1 = null:可以分别通过t2.i和t2到达两个对象。
无标题_1

t2 = null:无法到达任何对象。
无标题_1

现在,这两个对象都可以进行垃圾回收,因为我们无法调用它们。这就是众所周知的隔离岛。

 

Integer i = new Integer(4);
// the new Integer object is reachable  via the reference in 'i' 
i = null;
// the Integer object is no longer reachable. 

garbage collection

  1. 垃圾收集的资格:如果某个对象不可访问,则据说该对象符合GC(垃圾收集)的条件。在
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值