Java的垃圾回收机制实例分析

 更新时间:2019年08月13日 10:47:24   作者:cakincqm  
这篇文章主要介绍了Java的垃圾回收机制,结合实例形式分析了垃圾回收机制的原理及相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java的垃圾回收机制。分享给大家供大家参考,具体如下:

一 点睛

当程序创建对象、数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中,当这块内存不再被任何引用变量引用时,这块内存就变成了垃圾,等待垃圾回收机制进行回收。

垃圾回收机制的特点:

  • 垃圾回收机制只负责回收堆内存中对象,不会回收任何任何物理资源(例如数据库连接,网络IO等资源)。
  • 程序无法精确控制垃圾回收的运行,垃圾回收会在合适时候进行垃圾回收。当对象永久性地失去引用后,系统就会在合适时候回收它所占的内存。
  • 垃圾回收机制回收任何对象之前,总会先调用它的finalize方法,该方法可能使该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收。

二 对象在内存中的状态

激活状态:当一个对象被创建后,有一个以上的引用变量引用它。则这个对象在程序中处于激活状态,程序可通过引用变量来调用该对象的属性和方法。

去活状态:如果程序中某个对象不再有任何引用变量引用它,它就进入了去活状态。在这个状态下,系统的垃圾回收机制准备回收该对象所占用的内存,在回收该对象之前,系统会调用所有去活状态对象的finalize方法进行资源清理,如果系统在调用finalize方法重新让一个引用变量引用该对象,则这个对象会再次变为激活状态;否则该对象将进入死亡状态。

死亡状态:当对象与所有引用变量的关联都被切断,且系统会调用所有对象的finalize方法依然没有使该对象变成激活状态,那这个对象将永久性地失去引用,最后变成死亡状态。只有当一个对象处于死亡状态时,系统才会真正回收该对象所占有的资源。

三 实战

1 代码

public class StatusTranfer
{
  public static void test()
  {
   String a = new String("轻量级Java EE企业应用实战"); //执行完该代码后,此处的字符串对象处于可达状态
   a = new String("疯狂Java讲义");  //执行完该代码,此处的字符串对象处于可达状态,上处字符串处于可恢复状态
  }
  public static void main(String[] args)
  {
   test();
  }
}

2 说明

一个对象可以被一个方法的局部变量引用,也可以被其他类的类变量引用,或被其他对象的实例变量引用。当某个对象被其他类的类变量引用时,只有该类被销毁后,该对象才会进入可恢复状态;当某个对象被其他对象的实例变量引用后,只有当该对象被销毁后,该对象才会进入可恢复状态。

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java从控制台读入数据的几种方法总结

    Java从控制台读入数据的几种方法总结

    下面小编就为大家带来一篇Java从控制台读入数据的几种方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java中list集合的clear方法及空字符串的区别

    Java中list集合的clear方法及空字符串的区别

    这篇文章主要介绍了Java中list集合的clear方法及空字符串的区别,在使用list 结合的时候习惯了 list=null ;在创建这样的方式,但是发现使用list的clear 方法很不错,尤其是有大量循环的时候<BR>list.clear()与list = null 区别,需要的朋友可以参考下
    2023-08-08
  • Java+Eclipse+Selenium环境搭建的方法步骤

    Java+Eclipse+Selenium环境搭建的方法步骤

    这篇文章主要介绍了Java+Eclipse+Selenium环境搭建的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析

    JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析

    这篇文章主要介绍了JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java经典设计模式之模板方法模式定义与用法示例

    Java经典设计模式之模板方法模式定义与用法示例

    这篇文章主要介绍了Java经典设计模式之模板方法模式,简单说明了模板方法模式的原理、定义,并结合实例形式分析了java模板方法模式的具体使用方法,需要的朋友可以参考下
    2017-08-08
  • JavaScript base64 与 File 之间的互转(操作方法)

    JavaScript base64 与 File 之间的互转(操作方法)

    在JavaScript 中,可以使用 Blob 对象将 base64 字符串转换为 File 对象,这篇文章主要介绍了JavaScript base64 与 File之间的互转,需要的朋友可以参考下
    2024-05-05
  • JAVA实现301永久重定向方法

    JAVA实现301永久重定向方法

    本篇文章给大家总结了JAVA中实现永久重定向的方法以及详细代码,对此有需要的朋友可以参考学习下。
    2018-04-04
  • SpringBoot 异步线程间数据传递的实现

    SpringBoot 异步线程间数据传递的实现

    本文主要介绍了SpringBoot 异步线程间数据传递的实现,包括异步线程的基本概念、数据传递的方式、具体实现方式等,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Spring-webflux访问关系型数据库实战

    Spring-webflux访问关系型数据库实战

    这篇文章主要为大家介绍了Spring-webflux访问关系型数据库实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringBoot实现devtools实现热部署过程解析

    SpringBoot实现devtools实现热部署过程解析

    这篇文章主要介绍了SpringBoot实现devtools实现热部署过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论