第1章 Java基本概念及环境配置——FAQ1.11 什么是GC?GC的工作原理如何?

FAQ1.11 什么是GC?GC的工作原理如何?

答:

1.什么是GC?

垃圾回收(Garbage Collection)当一个电脑上的动态内存不再需要时,就应该予以释放,以让出内存,这种内存资源管理,称为垃圾回收(garbage collection),简称GC。

垃圾回收可以让程序员减轻许多负担,也减少程序员犯错的机会。垃圾回收最早起源于LISP语言。目前许多语言如Smalltalk、Java、C#都支援垃圾回收器。

2.GC的工作原理如何?

特征
垃圾回收有两个基本的原理:
1.考虑某个物件在未来的程式执行中,将不会被存取。
2.向这些物件要求归回内存。

实作
GC的来源可能是由编程语言本身内建(如Java、C#)或者经由外面的函数库所提供,而非建立于语言内部,例如贝姆垃圾收集器就是一种可支援C/C++语言的自动内存管理工具。
现在的GC(如Java和.NET)使用世代收集(generation cokkection),依照物体存活时间的长短使用不同的垃圾收集演法,以达到最好的收集效能。
基础的算法有下面几种方式,参考计数、追踪收集、标记清除、复制收集、堆积压缩、标记压缩。
以Java为例,整个Java堆可以切割成三个部分:

1.Young:

             1.Eden:存放新生物件
             2.Survivor:存放经过垃圾回收没有被清楚的物件
             3.semi-Spaces:和Survivor做Copyright collection。

2.Tenured:物件多次回收没有被清除,则移到该区块。

3.Perm:存放加载的类别还有方法物件。

Java不同的世代使用不同GC算法。

1.Minor collection:

YOUNG世代使用将Eden还有Survivor内的资料利用semi-space做复制收集(Copying collection), 并将原本Survivor内经过多次垃圾收集仍然存活的物件移动到Tenured。

 

2.Major collection则会进行Minor collection,Tenured世代则进行标记压缩收集。

posted @ 2010-01-14 22:32  2xd  阅读(604)  评论(0编辑  收藏  举报