java垃圾收集器收集标准

Java垃圾收集器与类的finalize()方法总结 1.垃圾收集器的工作目标是回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。2.垃圾收集器判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个"活动的部分"所引用,此时我们就说,该对象的...
java垃圾收集器收集标准
程序段1
3.fobj = new Object ( ) ; //第3行的fobj被赋于了一个新对象,在第1行赋予的旧对象就可以被回收了。所以说“符合回收了”。

程序段2:
4.aobj = bobj; //aobj转移到bobj,第1行赋予的旧对象就可被回收。
6.cobj = null; //该行cobj虽然为null,但cobj的旧对象在第5行被赋予给了aobj,有变量aobj引用,旧对象仍不能被回收。
7.aobj = null; //aobj指空,原cobj的、转移给aobj的对象可被回收了。

这里强调“可被回收”,不意味“立即回收”,什么时候回收,那是垃圾回收器决定的事情。2012-07-26
Java垃圾收集器与类的finalize()方法总结

1.垃圾收集器的工作目标是回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。

2.垃圾收集器判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个"活动的部分"所引用,此时我们就说,该对象的内存空间已经无用。所谓"活动的部分",是指程序中某部分参与程序的调用,正在执行过程中,尚未执行完毕。

3.垃圾收集器线程虽然是作为低优先级的线程运行,但在系统可用内存量过低的时候,它可能会突发地执行来挽救内存资源。当然其执行与否也是不可预知的。

4.垃圾收集器不可以被强制执行,但程序员可以通过调用System. gc方法来建议执行垃圾收集器。
5.不能保证一个无用的对象一定会被垃圾收集器收集,也不能保证垃圾收集器在一段Java语言代码中一定会执行。因此在程序执行过程中被分配出去的内存空间可能会一直保留到该程序执行完毕,除非该空间被重新分配或被其他方法回收。由此可见,完全彻底地根绝内存渗漏体的产生也是不可能的。但是请不要忘记,Java的垃圾收集器毕竟使程序员从手工回收内存空间的繁重工作中解脱了出来。设想一个程序员要用C或C++来编写一段10万行语句的代码,那么他一定会充分体会到Java的垃圾收集器的优点!

6.同样没有办法预知在一组均符合垃圾收集器收集标准的对象中,哪一个会被首先收集。

7.循环引用对象不会影响其被垃圾收集器收集。

8.可以通过将对象的引用变量(reference variables,即句柄handles)初始化为null值,来暗示垃圾收集器来收集该对象。但此时,如果该对象连接有事件监听器(典型的 AWT组件),那它还是不可以被收集。所以在设一个引用变量为null值之前,应注意该引用变量指向的对象是否被监听,若有,要首先除去监听器,然后才可以赋空值。

9.每一个对象都有一个finalize( )方法,这个方法是从Object类继承来的。

10.finalize( )方法用来回收内存以外的系统资源,就像是文件处理器和网络连接器。该方法的调用顺序和用来调用该方法的对象的创建顺序是无关的。换句话说,书写程序时该方法的顺序和方法的实际调用顺序是不相干的。请注意这只是finalize( )方法的特点。

11.每个对象只能调用finalize( )方法一次。如果在finalize( )方法执行时产生异常(exception),则该对象仍可以被垃圾收集器收集。

12.垃圾收集器跟踪每一个对象,收集那些不可到达的对象(即该对象没有被程序的任何"活的部分"所调用),回收其占有的内存空间。但在进行垃圾收集的时候,垃圾收集器会调用finalize( )方法,通过让其他对象知道它的存在,而使不可到达的对象再次"复苏"为可到达的对象。既然每个对象只能调用一次finalize( )方法,所以每个对象也只可能"复苏"一次。

13.finalize( )方法可以明确地被调用,但它却不能进行垃圾收集。

14.finalize( )方法可以被重载(overload),但只有具备初始的finalize( )方法特点的方法才可以被垃圾收集器调用。

15.子类的finalize( )方法可以明确地调用父类的finalize( )方法,作为该子类对象的最后一次适当的操作。但Java编译器却不认为这是一次覆盖操作(overriding),所以也不会对其调用进行检查。

16.当finalize( )方法尚未被调用时,System. runFinalization( )方法可以用来调用finalize( )方法,并实现相同的效果,对无用对象进行垃圾收集。

17.当一个方法执行完毕,其中的局部变量就会超出使用范围,此时可以被当作垃圾收集,但以后每当该方法再次被调用时,其中的局部变量便会被重新创建。

18.Java语言使用了一种"标记交换区的垃圾收集算法"。该算法会遍历程序中每一个对象的句柄,为被引用的对象做标记,然后回收尚未做标记的对象。所谓遍历可以简单地理解为"检查每一个"。

19.Java语言允许程序员为任何方法添加finalize( )方法,该方法会在垃圾收集器交换回收对象之前被调用。但不要过分依赖该方法对系统资源进行回收和再利用,因为该方法调用后的执行结果是不可预知的。 通过以上对垃圾收集器特点的了解,你应该可以明确垃圾收集器的作用,和垃圾收集器判断一块内存空间是否无用的标准。简单地说,当你为一个对象赋值为null并且重新定向了该对象的引用者,此时该对象就符合垃圾收集器的收集标准。2015-07-10
亲 GC不是这么玩的
各大厂商对GC实现也不尽相同2012-07-26
学2012-07-26
mengvlog 阅读 10 次 更新于 2025-07-20 00:15:06 我来答关注问题0
  • 设想一个程序员要用C或C++来编写一段10万行语句的代码,那么他一定会充分体会到Java的垃圾收集器的优点!6.同样没有办法预知在一组均符合垃圾收集器收集标准的对象中,哪一个会被首先收集。7.循环引用对象不会影响其被垃圾收集器收集。8.可以通过将对象的引用变量(reference variables,即句柄handles...

  •  腾云新分享 java 中的垃圾收集,怎样判断一个对象可以被收集

    在Java虚拟机中进行垃圾回收时,需要确定哪些对象不再被使用。如果程序中无法再引用某个对象,则该对象被认为是不可达的,可以被垃圾回收器回收。判断一个对象是否可达,主要依赖于GC roots,即根对象。从根对象无法访问到的对象即为不可达,可以被回收。在Java虚拟机中,通常有三类对象作为GC roots来判断...

  •  翡希信息咨询 Java垃圾回收GC 算法实现:G1算法详解

    一、主要目标与特点 主要目标:将停顿时间与分布预期化与可配置化。作为软实时垃圾收集器,可设置具体的停顿时间指标,如任意1秒内停顿不得超过5毫秒。 特点:通过将堆划分为多个小堆区,实现增量式收集,每次只处理部分小堆区,从而有效控制停顿时间。二、堆区域划分与收集模式 堆区域划分:G1将堆划分...

  • 总之,在Java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个: 1.给对象赋予了空值null,以下再没有调用过。 2.给对象赋予了新值,既重新分配了内存空间。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 归映hh 2015-09-01 · TA获得超过246个赞 知道答主 回答量:176 采纳率...

  •  文暄生活科普 【 JVM 】垃圾收集器——G1垃圾收集器

    G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器,旨在提升应用响应速度,减少GC停顿时间。G1将Java堆划分为多个大小相等的独立区域(Region),一般Region大小等于堆大小除以2048,例如堆大小为4096M,则Region大小为2M。G1保留了年轻代和老年代的概念,但它们...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部