首页 > 编程知识 正文

jvm默认垃圾收集器,国外海洋垃圾收集器

时间:2023-05-06 14:01:21 阅读:189677 作者:69

使用参数xx : gctimeradio设置垃圾回收时间占总CPU时间的百分比。 在参数xx : maxgcpausemillis中设定垃圾处理过程的最长休止时间。 在命令中- xx : useadaptivesizepolicy以打开自适应策略。 通过设置堆大小和MaxGCPauseMillis或GCTimeRadio,收集器可以自动调整落后音频世代的大小、jddxyz与Survivor的比率以及对象进入旧年代的年龄,从而调整我们设置的maxgsemillis或GCTimeRadio 旧版本的垃圾收集器Serial Old垃圾收集器(单线程) Serial Old收集器是Serial收集器的旧版本,在同一单线程收集器中使用“组织标记”算法。 此收集器的含义也用于客户端模式。 服务器模式主要有两种用途。 一个是在JDK1.5之前的版本中与Paralle Scavenge收集器配合使用,另一个是在同时收集Concurrent model failure作为CMS收集器的备份计划时使用。

Parallel Old垃圾收集器(多线程) Parallel Old收集器是Parallel收集器的较旧版本,使用多线程和“标记擦除算法”。 此收集器首次在JDK1.6中提供,之前落后的音频代收集器Parallel Scavenge收集器再次处于尴尬的境地。 落后的音频一代之所以选择Parallel Scavenge收集器,是因为以前只能选择Serial Old收集器。 为了Se

rial Old在性能上的拖累,使用了Parallel Scavenge收集器也未必能在整体应用上获得吞吐量最大化的效果,由于单线程的老年代收集中无法充分利用服务器的多CPU的处理能力,在老年代很大并且硬件条件比较高级的环境,这种组合的吞吐量甚至不一定有ParNew+CMS的组合给力。

 CMS 垃圾收集器

CMS垃圾收集器是一种以 获取最短回收  停顿时间为目标的收集器。目前 很大一部分的java应集中在 互联网或者B/S系统服务端上。CMS收集器是基于“标记-清除”算法实现的,它的运作过程分为下面几个部分:

初始标记:Stop The World,仅使用一条初始标记线程对所有与 GC Roots 直接关联的对象进行标记。并发标记:使用多条标记线程,与用户线程并发执行。此过程进行可达性分析,标记出所有废弃对象。速度很慢。重新标记:Stop The World,使用多条标记线程并发执行,将刚才并发标记过程中新出现的废弃对象标记出来。并发清除:只使用一条 GC 线程,与用户线程并发执行,清除刚才标记的对象。这个过程非常耗时。

 CMS是一款优秀的收集器,它的主要优点已经体现出来了:并发收集,低停顿,Sun公司的一些官方文档也称之为并发低停顿收集器。当然,CMS收集器也并不是 一个十全十美的收集器,它的缺点主要包括 下面几个方面:

吞吐量低无法处理浮动垃圾,导致频繁 Full GC使用“标记-清除”算法产生碎片空间

对于产生碎片空间的问题,可以通过开启 -XX:+UseCMSCompactAtFullCollection,在每次 Full GC 完成后都会进行一次内存压缩整理,将零散在各处的对象整理到一块。设置参数 -XX:CMSFullGCsBeforeCompaction告诉 CMS,经过了 N 次 Full GC 之后再进行一次内存整理。

G1通用收集器

G1 是一款面向服务端应用的垃圾收集器,它没有落后的音响代和老年代的概念,而是将堆划分为一块块独立的 Region。当要进行垃圾收集时,首先估计每个 Region 中垃圾的数量,每次都从垃圾回收价值最大的 Region 开始回收,因此可以获得最大的回收效率。

从整体上看, G1 是基于“标记-整理”算法实现的收集器,从局部(两个 Region 之间)上看是基于“复制”算法实现的,这意味着运行期间不会产生内存空间碎片。

这里抛个问题:
一个对象和它内部所引用的对象可能不在同一个 Region 中,那么当垃圾回收时,是否需要扫描整个堆内存才能完整地进行一次可达性分析?

并不!每个 Region 都有一个 Remembered Set,用于记录本区域中所有对象引用的对象所在的区域,进行可达性分析时,只要在 GC Roots 中再加上 Remembered Set 即可防止对整个堆内存进行遍历。

如果不计算维护 Remembered Set 的操作,G1 收集器的工作过程分为以下几个步骤:

初始标记:Stop The World,仅使用一条初始标记线程对所有与 GC Roots 直接关联的对象进行标记。并发标记:使用一条标记线程与用户线程并发执行。此过程进行可达性分析,速度很慢。最终标记:Stop The World,使用多条标记线程并发执行。筛选回收:回收废弃对象,此时也要 Stop The World,并使用多条筛选回收线程并发执行。

小结

HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。