Java Garbage Collection

本文深入解析Java垃圾回收机制,涵盖年轻代与老年代划分,Eden区及Survivor空间运作,以及Parallel Scavenge、Concurrent Mark Sweep、Incremental Concurrent Mark Sweep和Garbage First等收集器的工作原理与特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常意义上的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秒,这个特性对于准实时响应的系统而言非常的吸引人,这样就再也不用担心系统突然会暂停个两三秒了。

未完代续。。。

转载于:https://my.oschina.net/Evangelist/blog/158114

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值