您的位置:首页 > 编程语言 > Java开发

Java Garbage Collection

2013-08-30 00:00 555 查看
通常意义上的Java Heap:
通常上Java Heap 分为两部分:

Young Generation ---- 新生代
Old Generation ---- 老生代

新生代,又会分为以下几个子区域:
The Young generation region is further divided into sub-regions, namely

Eden
Survivor Space 1
Survivor Space 2

当一个对象被创建的时候,它会被放到Eden,也能够被在此被销毁。
如果Eden空间已被占满,这个新创建的对象就会被放到Survivor Space 1,
同样地,Survivor Space 1被用完,就会放到Survivor Space 2。

如果一个对象在Survivor Space 2中没被销毁/回收, 那么它就会退到老生代区域
The objects which are not destroyed in Survivor Space 2 are retired to the Old Generation region of the heap。

垃圾回收是java语言提供的最大的好处之一,如果合理的使用,会让我们的程序良好运行,如果使用的不当,将会对运行的应用影响很严重。一些对垃圾回收的影响因素必须要牢记。

(1)JVM Pause – The time taken by the JVM to do the GC during which the JVM pauses
(2)Throughput – The time interval between successive GC

多种收集器
Hotspot 虚礼机实际上有一些不同种类的垃圾收集器。每一个都有不同的性能表现和适用于不同的任务。以下是几个是主要的垃圾收集器:

(1)Parallel Scavenge (PS):
这是一个默认的收集器,当它执行时会暂停应用程序的一切,但是它是并行执行的(例如,使用多线程来执行),它还有一个特殊的模式,是可以自动调整各种堆大小和是否执行GC。

(2)Concurrent Mark Sweep (CMS):
这个收集器执行有很多阶段,有些阶段会暂停一切,但是跟程序一样在某些阶段也是并行执行的。

(3)Incremental Concurrent Mark Sweep (iCMS):
一个CMS的变种,为了更少的暂停程序,它有时候会达到这个目的。

(4)Garbage First (G1):
新一代垃圾收集器,从1.6版本已经被部分引入了,而且使用也逐渐增多。
它的目标是要做到尽量减少GC所导致的应用暂停的时间,让应用达到准实时的效果,同时保持JVM堆空间的利用率,将作为CMS的替代者在JDK 7中闪亮登场,其最大的特色在于允许指定在某个时间段内GC所导致的应用暂停的时间最大为多少,例如在100秒内最多允许GC导致的应用暂停时间为1秒,这个特性对于准实时响应的系统而言非常的吸引人,这样就再也不用担心系统突然会暂停个两三秒了。

未完代续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: