1 / 6
文档名称:

Java与C#的垃圾回收机制.doc

格式:doc   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Java与C#的垃圾回收机制.doc

上传人:xxj165868 2016/7/20 文件大小:0 KB

下载得到文件列表

Java与C#的垃圾回收机制.doc

相关文档

文档介绍

文档介绍:Java 与 C# 的垃圾回收机制 Java 与 C# 的垃圾回收机制收藏(一)垃圾回收器的基本假定(1 )最近被分配内存空间的对象最有可能需要被释放。在方法被执行前, 通常需要为该方法所使用到的对象分配内存空间, 搜索最近被分配的对象集合有助于花费最少的工作来释放进可能多的空闲内存空间。(2 )生命期最长的对象需要释放的可能性最小。在通过几轮垃圾回收后仍然存在的对象不大可能是那种能够在下一轮回收中被释放的临时对象, 搜索这些内存块往往要进行大量的工作, 却只能释放很小一部分的内存空间。(3 )同时分配内存的对象通常也会同时使用。将同时分配内存的对象存储位置彼此相连有助于提高缓存性能。(二)几种垃圾回收机制(1 )标记-清除收集器这种收集器首先遍历对象图并标记可到达的对象, 然后扫描堆栈以寻找未标记对象并释放它们的内存。这种收集器一般使用单线程工作并停止其他操作。(2 )标记-压缩收集器有时也叫标记-清除-压缩收集器, 与标记-清除收集器有相同的标记阶段。在第二阶段, 则把标记对象复制到堆栈的新域中以便压缩堆栈。这种收集器也停止其他操作。(3 )复制收集器这种收集器将堆栈分为两个域, 常称为半空间。每次仅使用一半的空间, jvm 生成的新对象则放在另一半空间中。 gc 运行时, 它把可到达对象复制到另一半空间, 从而压缩了堆栈。这种方法适用于短生存期的对象,持续复制长生存期的对象则导致效率降低。(4 )增量收集器增量收集器把堆栈分为多个域, 每次仅从一个域收集垃圾。这会造成较小的应用程序中断。(5 )分代收集器这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。 jvm 生成的新对象一般放在其中的某个域中。过一段时间, 继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。(6 )并发收集器并发收集器与应用程序同时运行。这些收集器在某点上( 比如压缩时) 一般都不得不停止其他操作以完成特定的任务, 但是因为其他应用程序可进行其他的后台操作, 所以中断其他处理的实际时间大大降低。(7 )并行收集器并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多 cpu 机器上使用多线程技术可以显著的提高 java 应用程序的可扩展性。(三) .NET 框架包含一个托管堆, 语言在分配引用类型对象时都要使用它。像值类型这样的轻量级对象始终分配在栈中, 但是所有的类实例和数组都被生成在一个内存池中, 这个内存池就是托管堆。.NET 框架中的垃圾回收器被称为分代的垃圾回收器( Generational Garbage Collector ) ,也就是说被分配的对象划分为3 个类别,或称为“代”。分别为 0,1,2。0、1、2 代对应的托管堆的初始化大小分别是 256K , 2M和 10M 。垃圾回收器在发现改变大小能够提高性能的话, 会改变托管堆的大小。例如当应用程序初始化了许多小的对象, 并且这些对象会被很快回收的话,垃圾回收器就会将第 0 代的托管堆变为 128K ,并且提高回收的频率。如果情况相反, 垃圾回收器发现在第 0 代的托管堆中不能回收很多空间时, 就会增加托管堆的大小。在应用程序初始化的之前, 所有等级的托管堆都是空的。当对象被初始化的时候, 他们会按照初