垃圾收集器

合集下载

垃圾捡拾器的制作方法

垃圾捡拾器的制作方法

垃圾捡拾器的制作方法
制作一个简单的垃圾捡拾器的方法如下:
材料:
1. 塑料管(建议使用PVC管或其他坚固的塑料管),直径约1-2厘米,长度约1-2米。

2. 两个塑料夹子或夹子(建议使用木工夹子,可以提供更好的抓握力)。

3. 绳子或橡皮筋。

步骤:
1. 首先,确保塑料管的长度适合你的使用需求。

如果需要更长的捡拾器,你可以使用两根塑料管连接在一起,使用绳子或橡皮筋固定它们在一起。

2. 在塑料管的一端,将一个塑料夹子或夹子固定在管子上。

确保它牢固地固定在管子上,以便能够抓住垃圾。

3. 在管子的另一端,将另一个塑料夹子或夹子固定在管子上,可以用绳子或橡皮筋将它绑在一起,以便能够将垃圾夹在夹子中。

4. 确保夹子的弹性足够好,能够夹住各种大小的垃圾。

5. 检查所有固定点,确保它们稳固牢固,能够承受一定的重量。

6. 完成后,测试垃圾捡拾器的使用。

根据需要,可调整夹子的位置以获得更好的抓拾效果。

制作完成后,你就可以使用这个简易的垃圾捡拾器清理垃圾了。

注意使用时要小
心不要将手指夹伤。

JVM常用参数设置(针对G1GC)

JVM常用参数设置(针对G1GC)

JVM常用参数设置(针对G1GC)Java虚拟机(JVM)是Java程序的运行环境,在JVM中,存在很多参数可以对其进行配置以优化Java应用程序的性能。

本文将介绍G1GC垃圾收集器常用的JVM参数设置。

G1GC(Garbage-First Garbage Collector)是JVM中的一种垃圾收集器,它是在Java 7 update 4之后引入的,并在Java 9中成为默认垃圾收集器。

G1GC的目标是为了更好地处理大内存的堆和长暂停时间,通过将堆内存划分成多个小区域(Region),并使用多线程来并行扫描、标记和压缩堆内存中的垃圾对象。

以下是一些常用的JVM参数设置,可以针对G1GC进行调整:1. -Xms:设置JVM的初始堆内存大小。

例如,-Xms2g将初始堆内存设置为2GB。

2. -Xmx:设置JVM的最大堆内存大小。

例如,-Xmx8g将最大堆内存设置为8GB。

3. -XX:+UseG1GC:启用G1GC垃圾收集器。

4. -XX:MaxGCPauseMillis:设置G1GC的最大垃圾收集停顿时间(单位:毫秒)。

默认值为200毫秒,可以根据实际需求进行调整。

较大的值可以减少垃圾收集的频率,但也会增加每次垃圾收集的停顿时间。

5. -XX:G1HeapRegionSize:设置G1GC中每个Region的大小。

默认值为堆内存的1/2048、较小的Region可以提高并行性和垃圾收集的效率,但同时也会增加垃圾收集器的元数据开销。

6. -XX:InitiatingHeapOccupancyPercent:设置G1GC开始执行垃圾收集的堆占用比例。

默认值为45%,当堆的占用率达到该比例时,G1GC将开始执行垃圾收集。

可以根据应用程序的内存使用情况进行调整。

7. -XX:ConcGCThreads:设置G1GC的并发垃圾收集线程数。

默认值为根据CPU核数动态计算的值。

可以根据实际硬件环境进行调整,较多的线程可以提高并发性能。

gc监控指标 -回复

gc监控指标 -回复

gc监控指标-回复什么是GC监控指标?GC(Garbage Collection,垃圾收集)是一种自动内存管理机制,它负责回收不再使用的对象,释放内存空间。

GC监控指标是用于衡量和监控垃圾收集器的性能和效率的一组指标。

通过定期检查这些指标,我们可以评估和优化应用程序的内存管理,以提高性能和稳定性。

GC监控指标有哪些?1. 垃圾回收次数:指垃圾收集器在一段时间内进行的回收次数。

垃圾回收次数越多,说明程序产生的垃圾对象较多,可能需要调整内存设置或改进代码逻辑。

2. 平均垃圾回收时间:指垃圾收集器完成一次垃圾回收所需的平均时间。

平均垃圾回收时间越长,说明垃圾收集器可能存在效率问题,需要进行优化。

3. 垃圾回收停顿时间:指垃圾收集过程中,应用程序暂停的时间。

垃圾回收停顿时间越长,应用程序的响应性就越差。

需要关注长时间的垃圾回收停顿,可能是因为堆内存不足或垃圾收集器策略不合理。

4. 垃圾回收堆大小:指垃圾收集器管理的堆内存大小。

过小的堆内存会频繁触发垃圾回收,影响性能;过大的堆内存则会占用过多的系统资源。

需要根据应用程序的需求和硬件配置来选择堆大小。

5. 垃圾回收器内存占用:指垃圾收集器本身占用的内存大小。

垃圾回收器本身也需要一定的内存来维护管理对象和执行垃圾回收算法。

内存占用过大可能导致应用程序运行时出现内存不足的问题。

如何监控GC指标?1. 使用垃圾收集器工具:大多数编程语言和开发框架提供了垃圾收集器工具,可以查看和监控GC指标。

例如,Java提供了VisualVM、JConsole 等工具,可以实时监控GC次数、回收时间等指标。

2. 使用日志和日志分析工具:垃圾收集器通常会产生详细的日志,记录了垃圾回收的信息和指标。

可以通过分析这些日志文件来了解GC指标的情况。

同时,也可以使用日志分析工具,如Elasticsearch、Kibana等,对垃圾回收日志进行统计和可视化展示。

3. 使用监控系统:使用监控系统可以实时地监控GC指标,并生成报告和图表进行分析。

村越各系列收集器安全操作及保养规程

村越各系列收集器安全操作及保养规程

村越各系列收集器安全操作及保养规程村越各系列收集器是一类常用的垃圾处理设备,其使用广泛,但在操作和保养中也需要注意安全。

下面将详细介绍村越各系列收集器的安全操作及保养规程。

一、安全操作规程1.穿戴防护装备:在操作村越各系列收集器时,应穿戴作业防护服、手套、口罩等防护装备,避免直接接触垃圾和有害物质。

2.不要将头部和手臂伸入进料口:在收集器运行中,应避免将头部和手臂伸入进料口,以免发生安全事故。

3.禁止撞击和碰撞:在操作过程中,应注意避免撞击和碰撞设备,以免对设备和人员造成伤害。

4.禁止私自改动设备:在操作过程中,不允许私自改动设备和电路,否则会引起设备故障和安全事故。

5.工作时注意环境和气味的变化:在操作过程中,应时刻关注环境和气味的变化,如有异味和异常情况及时停机检查。

6.停机前关闭电源:在停机前,应关闭电源开关,并等待所有运动部件停止运动后再进行操作。

7.善用急停装置:在紧急情况下,可使用急停装置,以保护设备和人员安全。

二、保养规程1.设备清洁:定期清洗设备,包括进料管道、滚筒等部件,以保证设备的正常运转。

2.检查电路及电气部件:定期检查电路及电气部件,确保设备正常运转,同时要注意保持设备的干燥、清洁。

3.定期更换易损件:定期更换易损件,如皮带等,以保证设备的正常运转。

4.注意润滑和保养:设备在运行过程中需要润滑和保养,以延长设备寿命,减少故障发生。

5.定期检查安全控制装置:定期检查安全控制装置的有效性,及时更换失效的装置,以保证设备和人员的安全。

三、结论村越各系列收集器是一些常见的垃圾处理设备,使用安全和保养具有重要的作用,不仅可以保证设备的正常运转,还可以保障操作人员的安全。

在操作和保养过程中,需要严格遵守相关规程,定期检查、维护设备,以保证设备的正常运转和使用寿命。

parallelscavenge原理

parallelscavenge原理

parallelscavenge原理Parallel scavenge是一种垃圾收集器,它被设计用于在多个处理器上并行处理垃圾收集。

Parallel scavenge具有以下特性和工作原理。

工作原理:1.初始标记阶段:暂停所有应用线程,并标记所有的根对象。

这个阶段会迅速地完成,一般只需暂停几毫秒。

2.并发标记阶段:在标记过程中,应用线程会继续运行。

垃圾收集器会跟踪并标记可达对象,以及对象间的引用关系,直到所有的可达对象都被标记。

3.重新标记阶段:为了处理在并发标记过程中发生的引用关系的变化,会再次暂停应用线程,并标记那些可能被回收的新对象。

4.并发清除阶段:清除所有被标记的非活动对象,释放内存空间。

特性:1. 运行与应用线程并行:Parallel scavenge使用了多线程来并行处理垃圾收集,与应用线程一起工作。

这样可以明显减少垃圾收集的时间,避免长时间的暂停。

2. 追求吞吐量:Parallel scavenge的目标是在尽可能短的时间内完成垃圾收集,以达到最高的吞吐量。

它主要适用于那些重视系统处理速度而可以接受长时间的垃圾收集时间的场景。

3. 自适应的调整:Parallel scavenge具有自适应的调整机制,可以根据当前系统的负载情况、垃圾收集时间等动态地调整各个参数。

这样可以使其能够适应不同的工作负载,并在不同的硬件平台上发挥最佳性能。

4. 并发收集:并发收集是Parallel scavenge的一个重要特性。

通过并发标记和并发清除阶段,垃圾收集器可以同时运行和应用线程。

这使得垃圾收集过程与应用程序的执行可以更好地交替进行,减少了垃圾收集对应用程序性能的影响。

5. 低暂停时间:Parallel scavenge致力于尽可能减少垃圾收集时的应用程序暂停时间,以提供更好的用户体验。

通过并发标记和重新标记的方式,该垃圾收集器可以在垃圾收集过程中最大限度地减少对应用程序的影响。

总结:Parallel scavenge是一种并行垃圾收集器,通过多线程和并发收集的方式,实现了高吞吐量和低暂停时间。

zgc收集器原理

zgc收集器原理

zgc收集器原理ZGC收集器原理ZGC(Z Garbage Collector)是一款由Oracle开发的垃圾收集器,它是针对大内存、低延迟场景下的一种创新性垃圾收集器。

ZGC收集器的设计目标是在不超过10ms的停顿时间内,能够处理几个TB 内存的堆。

一、并发处理ZGC采用了并发处理的方式来减少停顿时间。

它通过将垃圾收集的不同阶段与应用程序的执行相并发,以最大程度地减少停顿时间对应用程序的影响。

具体而言,ZGC采用了以下并发处理策略:1. 并发标记ZGC通过使用读屏障和写屏障来保证并发标记的准确性。

它首先从根对象开始,通过遍历对象图的方式标记所有存活的对象。

并且,ZGC在标记阶段中不会暂停应用程序的执行,从而保证了垃圾收集的并发性。

2. 并发清除在并发标记的过程中,ZGC会记录下所有需要被回收的对象,并在标记阶段结束后进行并发清除。

在并发清除阶段中,ZGC会将未被标记的对象回收,并将回收的内存空间进行重利用。

二、分代式处理ZGC将堆内存分为不同的代(Generation),并对不同代采用不同的垃圾收集算法。

这样一来,ZGC可以更加高效地管理堆内存,并减少垃圾收集的开销。

1. 年轻代ZGC将年轻代分为多个Region,并采用了并发的标记-复制算法。

在年轻代的垃圾收集过程中,ZGC会将存活的对象复制到一块新的内存空间中,并且在复制的过程中与应用程序的执行并发进行。

2. 老年代ZGC对老年代的垃圾收集采用了并发压缩算法。

在老年代的垃圾收集过程中,ZGC会将未被回收的对象进行压缩,从而减少内存的碎片化,并提高堆内存的利用率。

三、引用处理ZGC对引用的处理也非常重要。

它通过使用读屏障和写屏障来保证引用的正确性,并且在并发标记的过程中对引用进行跟踪和更新。

通过精确的引用处理,ZGC可以准确地判断对象的存活状态,避免误判和错误回收。

四、内存分配ZGC对内存分配也进行了优化。

它采用了本地线程缓冲区(Thread-Local Allocation Buffer,TLAB)的方式来提高内存分配的效率。

JVM的7种垃圾回收器(小结)

JVM的7种垃圾回收器(小结)

JVM的7种垃圾回收器(⼩结)垃圾回收算法和垃圾回收器对于JVM的垃圾回收算法有复制算法、标记清除、标记整理。

⽤阳哥的话就是:这些算法只是天上飞的理念,是⼀种⽅法论,但是真正的垃圾回收还需要有落地实现,所以垃圾回收器应运⽽⽣。

JVM回收的区域包括⽅法区和堆,jvm对于不同区域不同的特点采⽤分代收集算法,⽐如因为所有的对象都是在Eden区进⾏分配,并且⼤部分对象的存活时间都不长,都是“朝⽣⼣死”的,每次新⽣代存活的对象都不多,所以新采取复制算法;⽽jvm默认是新⽣代的对象熬过15次GC才能进⼊⽼年代,所以⽼年代的对象都是⽣命周期⽐较长的,采⽤标记清除或者标记整理算法。

那么对于这些算法的实现都有什么呢?新⽣代:serial、ParNew、Parallel⽼年代:Serial Old、Parallel Old、CMS全堆:G1并且他们的搭配组合如下:垃圾回收器jvm的垃圾回收器⼤体上的分类主要包括四种:串⾏、并⾏、并发(CMS)和G1。

串⾏垃圾回收器(Serial):它为单线程环境设计并且只使⽤⼀个线程进⾏垃圾回收,会暂停所有的⽤户线程。

所以不适合服务器环境。

并⾏垃圾回收器(Parallel):多个垃圾回收线程并⾏⼯作,此时⽤户线程是暂停的,适⽤于科学计算/⼤数据处理等弱交互场景。

并发垃圾回收器(CMS):⽤户线程和垃圾收集线程同时执⾏(不⼀定是并⾏,可能交替执⾏),不需要停顿⽤户线程。

互联⽹公司多⽤它,适⽤于对响应时间有要求的场景。

G1垃圾回收器:G1垃圾回收器将堆内存分割成不同的区域然后并发的对其进⾏垃圾回收。

默认的垃圾回收器平时我们没有配置什么jvm参数,程序也能正常执⾏,那么JVM默认的垃圾回收器是什么呢?那么如何查看默认的回收器呢?有很多⽅式,这⾥简单列举⼏种:1.命令⾏⽅式:1java -XX:+PrintCommandLineFlags -version可以看到jdk8默认的是使⽤的Parallel并⾏回收器。

分步收集器安全操作及保养规程

分步收集器安全操作及保养规程

分步收集器安全操作及保养规程前言分步收集器是一种方便有效的垃圾收集器,在大规模的内存回收中广泛应用。

但是,使用不当或维护不当可能会导致意外的安全问题和性能下降。

本文将介绍分步收集器的安全操作和保养规程,以确保其正确使用和维护。

安全操作规程1. 收集器的安装和启动在安装和启动分步收集器前,需要确认以下几点:•确保操作系统版本和配置满足分步收集器的最低硬件和软件要求•确认分步收集器的版本和配置与操作系统版本和配置兼容•确定收集器需要的文件和依赖•对于分布式环境下的收集器,需要确认集群的状态和节点数量•如果需要使用分步收集器的高级功能,如并行处理和内存压缩等,请事先学习相关文档2. 收集器运行过程中的安全操作在使用分步收集器收集垃圾时,需要注意以下几点:•禁止在垃圾收集期间修改任何对象指针或对象自身•避免在收集器阶段中尝试分配新的内存空间•禁止在收集器阶段中尝试修改已被标记为不可变的归属对象•避免在收集器阶段中修改线程堆栈或栈顶值•避免在收集器阶段中执行与垃圾收集无关的计算任务•在使用多线程分步收集器时,要遵守正确的线程同步规则,防止数据竞争和死锁3. 收集器关闭和卸载在关闭和卸载分步收集器前,需要注意以下几点:•如果需要保存收集器运行期间产生的数据和信息,需要事先保存好相关文件•如果需要重新安装或升级收集器,请事先卸载现有收集器•关闭分步收集器前,请确认所有关联的进程和模块已经正常退出保养规程除了安全操作规程,正确的收集器维护和保养也是确保分步收集器正常运行的关键。

下面是一些常见的保养规程:1. 定期清理收集器文件和依赖随着收集器运行时间的增长,其相关文件和依赖可能会占据大量磁盘空间或产生冗余。

定期清理这些文件和依赖,可以避免空间占用和性能下降。

2. 定期更新收集器和相关依赖分步收集器的开发和使用都是不断变化和提升的,保持与最新版本的兼容性和依赖关系,可以避免使用过时的和不安全代码。

3. 定期进行性能和安全测试为了确保分步收集器的性能和安全,需要定期进行性能和安全测试,及时发现和解决相关问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

垃圾收集器是Java语言区别于其他程序设计语言的一大特色。

它把程序员从手工回收内存空间的繁重工作中解脱了出来。

在SUN公司的Java程序员(Java Programmer)认证考试中,垃圾收集器是必考的内容,一般最多可以占总分值的6%左右。

但是由于SUN公司的Java Programming Language SL-275 课程的标准教材中,对有关垃圾收集器的内容只做了非常简单的介绍,而另外的一些关于Java技术的书籍,比如《Java 2 核心技术》(Core Java 2)、《Java编程思想》(Thinking in Java)、《精通Java 2》等等,里面关于垃圾收集器的内容也几乎没有,或者只是简单地提两句,所以很多参加Java Programmer认证考试的中国考生,在垃圾收集器这一部分的得分都为0分(笔者曾认识一位SUN公司授权的中国Java培训班的老师,其考试总分为89%,但垃圾收集器的部分竟然也为0分)。

鉴于此,笔者总结了这个垃圾收集器的专题,希望对广大Java技术的爱好者和准备认证考试的考生们有所帮助。

我们知道,许多程序设计语言都允许在程序运行期动态地分配内存空间。

分配内存的方式多种多样,取决于该种语言的语法结构。

但不论是哪一种语言的内存分配方式,最后都要返回所分配的内存块的起始地址,即返回一个指针到内存块的首地址。

当已经分配的内存空间不再需要时,换句话说当指向该内存块的句柄超出了使用范围的时候,该程序或其运行环境就应该回收该内存空间,以节省宝贵的内存资源。

在C,C++或其他程序设计语言中,无论是对象还是动态配置的资源或内存,都必须由程序员自行声明产生和回收,否则其中的资源将消耗,造成资源的浪费甚至死机。

但手工回收内存往往是一项复杂而艰巨的工作。

因为要预先确定占用的内存空间是否应该被回收是非常困难的!如果一段程序不能回收内存空间,而且在程序运行时系统中又没有了可以分配的内存空间时,这段程序就只能崩溃。

通常,我们把分配出去后,却无法回收的内存空间称为"内存渗漏体(Memory Leaks)"。

以上这种程序设计的潜在危险性在Java这样以严谨、安全著称的语言中是不允许的。

但是Java语言既不能限制程序员编写程序的自由性,又不能把声明对象的部分去除(否则就不是面向对象的程序语言了),那么最好的解决办法就是从Java程序语言本身的特性入手。

于是,Java技术提供了一个系统级的线程(Thread),即垃圾收集器线程(Garbage Collection Thread),来跟踪每一块分配出去的内存空间,当Java 虚拟机(Java Virtual Machine)处于空闲循环时,垃圾收集器线程会自动检查每一快分配出去的内存空间,然后自动回收每一快可以回收的无用的内存块。

垃圾收集器线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。

它有效地防止了内存渗漏体的出现,并极大可能地节省了宝贵的内存资源。

但是,通过Java虚拟机来执行垃圾收集器的方案可以是多种多样的。

下面介绍垃圾收集器的特点和它的执行机制:垃圾收集器系统有自己的一套方案来判断哪个内存块是应该被回收的,哪个是不符合要求暂不回收的。

垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。

程序员唯一能做的就是通过调用System. gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。

这也是垃圾收集器的最主要的缺点。

当然相对于它给程序员带来的巨大方便性而言,这个缺点是瑕不掩瑜的。

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

判断一个对象是否符合垃圾收集器的收集标准,这是SUN公司程序员认证考试中垃圾收集器部分的重要考点(可以说,这是唯一的考点)。

所以,考生在一段给定的代码中,应该能够判断出哪个对象符合垃圾收集器收集的标准,哪个不符合。

下面结合几种认证考试中可能出现的题型来具体讲解:Object obj = new Object ( ) ;我们知道,obj为Object的一个句柄。

当出现new关键字时,就给新建的对象分配内存空间,而obj的值就是新分配的内存空间的首地址,即该对象的值(请特别注意,对象的值和对象的内容是不同含义的两个概念:对象的值就是指其内存块的首地址,即对象的句柄;而对象的内容则是其具体的内存块)。

此时如果有obj = null;则obj 指向的内存块此时就无用了,因为下面再没有调用该变量了。

请再看以下三种认证考试时可能出现的题型:程序段1:1.fobj = new Object ( ) ;2.fobj. Method ( ) ;3.fobj = new Object ( ) ;4.fobj. Method ( ) ;问:这段代码中,第几行的fobj 符合垃圾收集器的收集标准?答:第3行。

因为第3行的fobj被赋了新值,产生了一个新的对象,即换了一块新的内存空间,也相当于为第1行中的fobj赋了null值。

这种类型的题在认证0考试中是最简单的。

程序段2:1.Object sobj = new Object ( ) ;2.Object sobj = null ;3.Object sobj = new Object ( ) ;4.sobj = new Object ( ) ;问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?答:第1行和第3行。

因为第2行为sobj赋值为null,所以在此第1行的sobj符合垃圾收集器的收集标准。

而第4行相当于为sobj赋值为null,所以在此第3行的sobj也符合垃圾收集器的收集标准。

如果有一个对象的句柄a,且你把a作为某个构造器的参数,即new Constructor ( a )的时候,即使你给a赋值为null,a也不符合垃圾收集器的收集标准。

相关文档
最新文档