java中的对象和垃圾回收

1.对象在内存中的状态:(疯狂Java讲义228页)

激活:有一个以上的引用变量引用它,没有被引用时处于去活状态准备回收,系统调用finalize方法依然没有让一个引用变量引用该对象则变为死亡状态。如下例:

public class A
{
     public static void test()
     {
            String a=new String("Java1");// String("Java1")处于激活状态
            a=new String("Java2");//String("Java1")对象处于去活状态
     }
}
2.强制垃圾回收

  可以使用System类的gc()静态方法和Runtime对象的gc()实例方法:Runtime.getRuntime().gc()通知系统进行垃圾回收,但系统不一定立即进行回收。

3.finalize方法

  当垃圾回收机制回收某个对象所占用的内存之前,通常要求程序调用适当的方法来清理资源,默认情况下使用finalize方法,该方法是定义在Object类的实例方法,当该方法返回之后,对象消失,垃圾回收机制开始执行。

  finalize特点:

  1)永远不要主动调用某个对象的finalize方法。

  2)何时被调用是不确定的,而且整个系统运行过程中也不一定会被执行。

  3)当JVM执行去活对象的finalize方法时,可能使该对象或系统中其它对象重新编程激活状态。

  4)当JVM执行finalize方法出现异常时,垃圾回收机制不会报告异常。

4.对象的软、弱和虚引用

   java.lang.ref提供3个类:SoftReference、PlantomReference和WeakReference。

   强引用:程序创建一个对象,并把这个对象赋值给一个引用变量。此时该对象处于激活状态。

   软引用:通过SoftReference类来实现,当一个对象只具有软引用时,它有可能被垃圾回收机制回收,通常用于对内存敏感的程序中。

   弱引用:通过WeakReference类实现,当垃圾回收机制运行时,不管内存是否足够,总会回收该对象所占的内存。

   虚引用:PhantomReference类实现,主要用于跟踪对象被垃圾回收的状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值