`
strangeromo
  • 浏览: 64796 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

垃圾收集器的主要特点

    博客分类:
  • java
阅读更多

垃圾收集器的主要特点有:


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并且重新定向了该对象的引用者,此时该对象就符合垃圾收集器的收集标准。

 

转自:http://www.matrix.org.cn/thread.shtml?topicId=25949&forumId=19

分享到:
评论

相关推荐

    7种JVM垃圾收集器特点-优劣势-及使用场景.pdf

    "JVM垃圾收集器特点、优劣势及使用场景" JVM垃圾收集器是Java虚拟机(JVM)中的一种自动内存管理机制,负责回收Java程序中不再使用的对象,以避免内存泄漏和提高程序性能。Java中有多种垃圾收集器,每种垃圾收集器...

    Java垃圾收集器推荐.pdf

    Java垃圾收集器的主要职责是自动回收程序中不再使用的对象所占用的内存空间,以防止内存泄漏和优化内存资源的利用。垃圾收集器通过监控对象的引用情况来判定一个对象是否可以被回收。当一个对象没有任何活动引用指向...

    直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景

    了解各种垃圾收集器的特点、优势、劣势以及使用场景对于优化Java应用至关重要,特别是对于准备BAT(百度、阿里巴巴、腾讯)等大公司面试的求职者来说。 【JVM内存模型】 JVM的内存主要分为堆区和非堆区。堆区又...

    JVM初探- 内存分配、GC原理与垃圾收集器

    最后,JVM中提供了多种垃圾收集器,如Serial、Parallel、CMS、G1等,每种收集器都有其适用的场景和特点。例如,Serial收集器是单线程的,适用于小内存环境;而CMS(Concurrent Mark Sweep)收集器是追求低停顿时间的...

    Java垃圾收集器参考.pdf

    2. **无用对象的判断标准**:垃圾收集器判断一个对象是否无用,主要看它是否无法被程序中的任何正在执行或可触及的部分引用。一旦对象失去所有引用,它就被认为是无用的,可以被回收。 3. **低优先级与紧急响应**:...

    【Java正来-Java虚拟机专题】-Java垃圾收集器与内存分配策略

    主要整理内容为:分析了垃圾收集的算法和JDK1.7中提供的7款垃圾收集器的特点以及运作原理。以及内存分配策略

    G1垃圾收集器1

    **G1垃圾收集器**是Java虚拟机(JVM)的一种高效、低延迟的垃圾回收器,主要设计用于服务端的应用,特别是在多处理器和大内存环境中。G1自JDK7开始支持,其目标是在满足可预测的暂停时间的同时,保持较高的整体吞吐...

    JVM初探内存分配GC原理与垃圾收集器共16页.pdf.z

    JVM中的垃圾收集器有多种,每种都有其特点和适用场景: 1. **Serial Collector**:单线程的垃圾收集器,适用于轻量级或者客户端应用。 2. **Parallel Collector**:多线程版本的Serial Collector,提高了垃圾收集...

    面试官:怎么做JDK8的垃圾收集器的调优(面试常问)

    JDK8中有多种垃圾收集器,包括Serial收集器、Parallel收集器、CMS收集器、G1收集器等,每种垃圾收集器都有其特点和适用场景。选择合适的垃圾收集器对系统的性能和稳定性具有重要影响。 Serial收集器是使用单线程...

    java虚拟机中的垃圾收集GC.pdf

    本篇内容将深入探讨Java虚拟机中的垃圾收集机制,包括不同类型的垃圾收集器、其工作原理以及如何选择合适的垃圾收集器以满足特定应用的需求。 #### 垃圾收集的新发展 近年来,随着计算机硬件的发展和技术的进步,...

    Java垃圾收集必备手册

    在实战中,调优可能涉及到调整新生代和老年代的堆内存大小,设置合理的垃圾收集器参数(如-XX:+UseG1GC启用G1垃圾收集器),以及根据应用程序的特性调整GC日志记录的级别。例如,对于响应时间要求高的系统,可以使用...

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms.zip

    首先,ParNew垃圾收集器是新生代(Young Generation)的默认垃圾收集器,主要处理短生命周期的对象。它是一个单线程的收集器,但在多CPU环境中,可以通过设置`-XX:+UseParallelGC`和`-XX:ParallelGCThreads`参数来...

    java垃圾收集机制

    在Java中,有一些机制可以让开发者与垃圾收集器进行交互,以便更好地控制内存的使用。 ##### 3.1 FINALIZE() 方法 `finalize()` 方法是在对象即将被垃圾收集器回收前调用的一个特殊方法。虽然它的存在提供了一种...

    JVM常用垃圾回收器的特性与使用场景.md

    该文档总结了JVM主要的七种垃圾回收器特点与区别,分别描述了他们作用于堆内存的哪些区域,采用单线程还是多线程工作方式,在运行过程中是否需要暂停其他用户工作线程。是笔者对周志明老师的《深入理解java虚拟机》...

    Java垃圾收集必备手册.pdf

    本手册提供了一个全面的指南,旨在帮助读者理解Java中垃圾收集的工作原理,掌握不同垃圾收集器的特点,以及如何进行垃圾收集的调优。 首先,文档中提到了垃圾收集的定义,即找到内存中不再被使用的数据(即垃圾),...

    垃圾回收器(csdn)————程序.pdf

    经典垃圾收集器主要分为两类:并行/串行和并发。串行收集器如Serial和Serial Old适合单线程环境,其特点是简单高效,但可能导致较长的暂停时间。并行收集器如ParNew和Parallel Scavenge利用多核优势提高吞吐量,而...

    【Java技术资料】-Java垃圾收集必备手册

    这份"Java技术资料"中的"Java垃圾收集必备手册"很可能包含了关于Java内存管理、垃圾收集机制、垃圾收集器以及如何优化垃圾收集的一些关键知识点。以下是这些主题的详细说明: 1. **Java内存模型**:Java内存分为堆...

    Java理解CMS收集器.pdf

    CMS(Concurrent Mark Sweep)收集器是Java虚拟机中的一种垃圾收集器,主要针对老年代的内存回收,其特点是并发和低停顿。CMS收集器的主要目标是在尽可能短的时间内完成垃圾收集,减少应用程序的暂停时间,提高用户...

    基于流体涡旋向心吸力的水面垃圾收集机器人设计.pdf

    垃圾收集系统同样为基于Arduino的远程控制,通过控制器的其他触发开关对垃圾收集系统的水泵进行控制。 运行测试 机器人经过模拟仿真和实际测试,结果表明,基于流体涡旋向心吸力的水面垃圾收集机器人的平衡状态及...

Global site tag (gtag.js) - Google Analytics