- 浏览: 103210 次
- 性别:
- 来自: 北京
最新评论
对Java中的垃圾回收算法的摘要
垃圾收集的算法分析
java语言规范没有明确地说明jvm使用哪种垃圾回收算法,但是任何一种垃圾收集算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。
大多数垃圾回收算法使用了根集(rootset)这个概念(有了这个概念应该就能解决面试中被问到的互为引用的孤独岛的情况);所谓根集就是正在执行的java程序可以访问的引用变量的集合(包括局部变量、参数、类变量),程序可以使用引用变量访问对象的属性和调用对象的方法。垃圾收集首选需要确定从根开始哪些是可达的和哪些是不可达的,从根集可达的对象都是活动对象,它们不能作为垃圾被回收,这也包括从根集间接可达的对象。而根集通过任意路径不可达的对象符合垃圾收集的条件,应该被回收。下面介绍几个常用的算法。
1、引用计数法(referencecountingcollector)
引用计数法是唯一没有使用根集的垃圾回收得法,该算法使用引用计数器来区分存活对象和不再使用的对象。一般来说,堆中的每个对象对应一个引用计数器。当每一次创建一个对象并赋给一个变量时,引用计数器置为1。当对象被赋给任意变量时,引用计数器每次加1。当对象出了作用域后(该对象丢弃不再使用),引用计数器减1,一旦引用计数器为0,对象就满足了垃圾收集的条件。
基于引用计数器的垃圾收集器运行较快,不会长时间中断程序执行,适宜地必须实时运行的程序。但引用计数器增加了程序执行的开销,因为每次对象赋给新的变量,计数器加1,而每次现有对象出了作用域生,计数器减1。
2、tracing算法(tracingcollector)
tracing算法是为了解决引用计数法的问题而提出,它使用了根集的概念。基于tracing算法的垃圾收集器从根集开始扫描,识别出哪些对象可达,哪些对象不可达,并用某种方式标记可达对象,例如对每个可达对象设置一个或多个位。在扫描识别过程中,基于tracing算法的垃圾收集也称为标记和清除(mark-and-sweep)垃圾收集器.
3、compacting算法(compactingcollector)
为了解决堆碎片问题,基于tracing的垃圾回收吸收了compacting算法的思想,在清除的过程中,算法将所有的对象移到堆的一端,堆的另一端就变成了一个相邻的空闲内存区,收集器会对它移动的所有对象的所有引用进行更新,使得这些引用在新的位置能识别原来的对象。在基于compacting算法的收集器的实现中,一般增加句柄和句柄表。
4、coping算法(copingcollector)
该算法的提出是为了克服句柄的开销和解决堆碎片的垃圾回收。它开始时把堆分成一个对象面和多个空闲面,程序从对象面为对象分配空间,当对象满了,基于coping算法的垃圾收集就从根集中扫描活动对象,并将每个活动对象复制到空闲面(使得活动对象所占的内存之间没有空闲洞),这样空闲面变成了对象面,原来的对象面变成了空闲面,程序会在新的对象面中分配内存。
一种典型的基于coping算法的垃圾回收是stop-and-copy算法,它将堆分成对象面和空闲区域面,在对象面与空闲区域面的切换过程中,程序暂停执行。
5、generation算法(generationalcollector)
stop-and-copy垃圾收集器的一个缺陷是收集器必须复制所有的活动对象,这增加了程序等待时间,这是coping算法低效的原因。在程序设计中有这样的规律:多数对象存在的时间比较短,少数的存在时间比较长。因此,generation算法将堆分成两个或多个,每个子堆作为对象的一代(generation)。由于多数对象存在的时间比较短,随着程序丢弃不使用的对象,垃圾收集器将从最年轻的子堆中收集这些对象。在分代式的垃圾收集器运行后,上次运行存活下来的对象移到下一最高代的子堆中,由于老一代的子堆不会经常被回收,因而节省了时间。
6、adaptive算法(adaptivecollector)
在特定的情况下,一些垃圾收集算法会优于其它算法。基于adaptive算法的垃圾收集器就是监控当前堆的使用情况,并将选择适当算法的垃圾收集器。
发表评论
-
hibernate中htm.xml注意的一个问题
2011-06-08 12:00 880遇到了这个问题 总是报 org.hibernate ... -
罗马数字转成阿拉伯数字
2011-06-02 13:15 2617首先得知道罗马数字是怎么回事: http://520920. ... -
有关于验证码的
2011-06-01 13:00 634验证码 是怎么出来的呢 应该有很多种方式,今天看到了一段代码中 ... -
转系统架构的一片文章
2011-05-13 14:27 718原文其实应该是.NET上面的 但是我觉得架构上同样适用 ... -
java中从汉字得到拼音的函数【转载】
2011-05-11 10:17 891public class GB2Alpha { ... -
后缀树 后缀数组 字符串的 那些面试题... 【烂,别点进来】
2011-04-24 16:28 1580最近在总结点面试题,好像放在公司里,忘记拷到U盘上了。回去传到 ... -
海量数据的匹配 bloom filter 【别进来 很烂】
2011-04-22 10:30 1018引出 是老张说的腾讯的面试题 说 昨天有一亿个QQ登陆 ... -
Hello mina 【别进来 烂 会后悔】
2011-04-18 17:46 758mina nio 开源代码 以上是关键字 感觉 ... -
java nio & reactor
2011-04-15 14:26 848想看 java io很久了 菜的很 两个文章和一本书 小了解一 ... -
vm到jsp
2011-02-14 14:54 2115http://www.iteye.com/topic/1355 ... -
json&jsonP&跨域
2011-01-10 15:58 777http://www.ibm.com/developerwor ... -
PermGen space
2010-12-14 11:59 714http://blog.csdn.net/Jerry_R ... -
编程珠玑课后题,吝啬的初始化
2010-12-05 16:20 1043在这里,我们有一个稀疏的数组需要访问,并且在第一次访问的时 ... -
BitSet 原理&位操作&基本类型的大小
2010-12-05 11:52 1864因为在看编程珠玑 第一章讲到了 用BitSet来对N多数字进行 ... -
JVM 小总结
2010-11-25 14:22 653http://www.iteye.com/topic/8218 ... -
jdk5.0 6.0新特性
2010-11-25 08:18 566也许会被蛋疼的人问道吧 http://qwzhl100 ... -
对象的复制:ezmorph
2010-11-17 10:59 734ezmoph组件 http://blog.csdn.net/ ... -
how tomcat works
2010-11-16 17:36 976http://jarfield.iteye.com/blog/ ... -
ThreadLocal
2010-11-14 22:05 772起因还是那天培训 对这个了解不深刻 赶紧看看 ... -
ConcurrentHashMap记录
2010-11-14 21:09 837那天的讲座中 武祥提到了 ConcurrentHashMap ...
相关推荐
本文深入探讨了Java垃圾回收机制的特点及其在Java虚拟机(JVM)中的应用,并详细分析了几种典型的垃圾收集算法。此外,文章还介绍了如何通过命令行参数来调整垃圾回收的行为以及`finalize`方法的作用。通过理解这些...
Java 7 GC(垃圾回收)参数配置是Java虚拟机(JVM)调优的关键组成部分,它决定了垃圾回收的行为和性能表现。本文将详细介绍Java 7中常见的垃圾回收器和相应的JVM参数,帮助读者更好地理解和使用这些参数进行性能...
3. Java语言描述:Java是一种面向对象的语言,具有平台无关性、垃圾回收机制和强大的类库等特点。在描述数据结构和算法时,Java的面向对象特性使得代码可读性和可维护性更高。例如,可以定义类来封装数据结构的元素...
优化涉及到多个层面,包括代码质量、JVM设置以及垃圾回收策略。在Java中,Just-In-Time (JIT) 编译器是提升性能的重要工具,它能够将字节码转化为机器码,以提高运行速度。 JIT编译器的配置标志如 `-server` 和 `-...
* JVM 的性能优化:包括 MinorGC、MajorGC、FullGC 等垃圾回收算法。 Java 集合框架 * Java 集合框架的概述:包括 Collection、List、Set、Map 等接口。 * ArrayList 和 LinkedList 的比较:包括它们的实现原理、...
2. JAVA垃圾回收:垃圾回收机制、Full GC、System.gc()等。 3. JAVA反射机制:Class类、Method类、Field类等。 七、其他 1. 数据类型:primitive type、reference type等。 2. оператор:算术操作符、比较...
优化这部分可能包括减少垃圾回收的频率,改进内存分配算法,或者使用更节省内存的数据结构。 总体来说,本文的研究旨在解决Java在移动通讯设备上执行效率低下的问题,通过深入理解KVM的设计和技术,提出针对性的...
Java虚拟机通过类文件验证、及时编译、垃圾收集以及线程管理等关键技术,为Java程序提供了一个高效、安全的运行环境。随着技术的发展,Java虚拟机也在不断改进和完善,以适应更加复杂的软件开发需求。
特别指出,Java和C++在内存管理上的不同方法(如垃圾回收和手动内存管理)体现了两者在设计理念上的根本差异。此外,Java的集合框架和C++的STL都为处理集合类型提供了高效的实现。对于JVM的深入理解有助于优化Java...
2.1 **Java语言的特点** - Java具有“一次编写,到处运行”的特性,强类型、面向对象,同时支持垃圾回收机制,这使得它成为开发游戏的合适选择。 2.2 **JAVA的主要特性** - 包括平台独立性、多线程支持、丰富的类库...
### Java垃圾回收的理解与实践 #### 执行摘要 垃圾收集(Garbage Collection, GC)是Java平台上应用程序行为不可或缺的一部分,但往往被误解。Java开发者需要理解GC的工作原理以及如何通过选择和调整收集器机制,...
尽管Java虚拟机(JVM)及其内置的垃圾回收机制在很大程度上减轻了开发者手动管理内存的压力,但在复杂的工程项目中,内存泄漏仍然是一个常见且难以避免的问题。本文将首先概述垃圾回收机制的基本原理,随后分析几种...
- 垃圾回收机制。 - **实践意义**: - 避免内存泄漏。 - 提升程序性能。 #### 28. SQL实例整理 - **SQL语句**: - 数据查询。 - 数据插入、更新、删除。 - **应用场景**: - 数据库操作的实战案例。 #### 29. ...
- **JVM 内部工作原理**:深入剖析 Java 虚拟机的工作机制,包括内存管理、垃圾回收策略等。 - **性能调优**:提供一系列提高 Java 应用程序性能的技巧和策略,如减少内存泄漏、优化算法等。 #### 三、总结 《思考...
- **JVM垃圾回收机制:** 各种垃圾回收算法的原理和选择,以及如何根据不同的应用场景配置垃圾回收参数。 - **类加载机制:** 类加载过程中的双亲委派模型、类加载器的类型和自定义类加载器的实现。 #### 4. J2EE...
6. 内存管理:Java的内存管理主要包括自动垃圾收集,采用可达性分析算法确定对象是否存活,以及分代收集策略,将堆划分为新生代和老年代,针对不同生命周期的对象进行优化回收。 7. 类与接口:JVM规范定义了类和...
【摘要】:这篇论文主要探讨了Java实时规范中的非堆内存抽象,并且针对实现过程中可能出现的不确定性和运行时的时间不可预测性问题,提出了一种适用于硬Java实时平台的非堆内存模型。该模型依赖于硬Java实时平台的...
Java语言规范要求提供某种形式的垃圾回收机制来回收未使用的存储空间。传统的“停止世界”收集器会严重影响应用程序的响应性,因此需要一种并发或增量式的垃圾回收机制。在这些垃圾回收机制中,较低的暂停时间通常会...
此外,Java的垃圾回收机制和多线程支持也保证了系统的稳定性和性能。 在系统架构上,通常采用MVC(Model-View-Controller)设计模式,这是一种常见的软件设计模式,用于将业务逻辑、数据模型和用户界面分离,从而...
11. 在Java语言中,垃圾回收机制是一种自动管理内存的机制,它可以及时释放不再使用的内存空间。 12. 编写和运行Java applet程序与编写和运行Java application程序不同的步骤是编写HTML文件调用该小程序,以.html为...