java垃圾回收机制简介

一、介绍

    传统的C/C++语言需要程序员负责回收已经分配出去的内存,但程序员并不能确定何时去释放内存。如果不能及时回收已经分配出去的内存空间,就会引起系统性能下降,运行速度降低,严重时会导致系统崩溃。

    与C/C++语言不同,java不需要程序员直接控制内存回收,java程序的内存分配和回收都是由JRE在后台自动进行。一般在CPU空闲或者内存不足的时候,JRE会提供一条线程去检测和回收那些不再使用的内存,这种机制被称为垃圾回收(Garbage Collection )简称 GC。

二、原理

    Java 的堆内存是一个运行时数据区,用来保存类的对象。JVM的堆内存中存放着正在运行的应用程序所建立的所有对象,这些对象都不需要通过代码显式释放。一般来说,垃圾回收是一种动态存储管理技术,它自动的释放程序不再使用的对象,按照特定的垃圾回收算法去实现内存的释放。

       1.对象在内存中的几种状态:

        (1)激活状态:对象被创建被引用,程序可以通过引用它来获得该对象的属性和方法。

        (2)去活状态:程序中某个对象不再有引用。

        (3)死亡状态:当该对象失去了所有引用,且系统已经调用了finalize方法依然没有激活该对象。

        只有当该对象处于死亡状态时,系统才会真正回收该对象所占用的资源。

       2.对象的几种引用类型:

        (1)强引用:最常见的引用方式,例如:Object object = new Object();当他被创建并且被一个或多个引用变量所引用时,即使系统抛出OutOfMemoryError错误也不会被回收,当然如果使用object = null, 可以弱化引用,等待回收。

        (2)软引用:需要通过SoftReference类来实现,当内存足够时,所创建的对象就不会被回收;当内存不够时,所创建的对象就会被回收。

        (3)弱引用:需要通过WeakReference类来实现,只要系统运行回收机制,无论内存是否充足,该对象就会被回收。

        (4)虚引用:虚引用必须和引用队列(ReferenceQueue)联合使用。主要用于追踪对象被回收的状态。当垃圾回收机制准备回收该对象时,如果发现它有虚引用,就会在回收该对象内存空间之前,把这个虚引用加到和他关联的引用队列中。

   

三、特性

      1.垃圾回收机制只会回收运行程序中无用对象的内存空间,对其他的物理资源比如:数据库连接、磁盘IO等无能为力。

      2.我们可以将无用变量置为null来暗示垃圾回收机制可以回收该对象。

     3.由于不同JVM采用不同的垃圾回收算法,所以垃圾回收发生是无法预知的。我们在程序中可以调用finalize()方法或者System.gc()等方法来建议系统进行垃圾回收。

 

四、优缺点

    优点: 

            1.垃圾回收机制能自动释放内存空间,减少编程的负担。

            2.垃圾回收机制保护程序的完整性,是Java语言安全性策略的一个重要部分。

    缺点:

            1.影响性能。JVM需要判断对象是否有用,并且需要回收无用的对象。

 

文章概念很多,也借用了一些书籍的总结。如果文中有什么错误,欢迎指出,以免更多的人被误导。

 

           

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值