`

jmv第四节-垃圾回收器详细讲解

阅读更多

这篇文章我想和大家分享一下现在java的垃圾回收器

1.串行回收器 -XX:+UseSerialGC

使用一个线程进行串行回收,新生代采用复制算法,老年代使用标记-压缩算法,回收的时候程序全部暂停

缺点是:停顿时间长

有点是:久经考验,bug少



 

 

2.ParNew  -XX:+UseParNewGC 新生代并行,老年代串行

回收的时候程序全部暂停


3.Parallel收集器

类似ParNew,更加关注吞吐量

-XX:+UseParallelGC 使用Parallel收集器+老年代串行

-XX:+UseParallelOldGC 使用Parallel+老年代并行

回收的时候程序全部暂停

-XX:MaxGCPauseMills

最大停顿时间,单位毫秒

GC尽力保证回收时间不超过设定值

-XX:GCTimeRatio

0-100的取值范围

垃圾收集时间占总时间的比

默认99,即最大允许1%时间做GC

数是矛盾的。因为停顿时间和吞吐量不可能同时调优



 4.CMS收集器 -XX:+UseConcMarkSweepGC

Concurrent Mark Sweep 并发标记清除算法

和应用程序一起执行,并发阶段会降低吞吐量

这个是老年代收集器,新生代采用ParNew

 

CMS运行过程比较复杂,着重实现了标记的过程,可分为

 

初始标记

根可以直接关联到的对象,速度快,这个标记全局停顿。

并发标记(和用户线程一起)

主要标记过程,标记全部对象

重新标记

由于并发标记时,用户线程依然运行,因此在正式清理前,再做修正,重新标记也产生全局停顿

并发清除

(和用户线程一起)

基于标记结果,直接清理对象

主要标记是并发执行的,初始标记和重新标记比较少量的工作是要全局停顿的,时间短。

特点

尽可能降低停顿

会影响系统整体吞吐量和性能

比如,在用户线程运行过程中,分一半CPU去做GC,系统性能在GC阶段,反应速度就下降一半

清理不彻底因为在清理阶段,用户线程还在运行,会产生新的垃圾,无法清理因为和用户线程一起运行,不能在空间快满时再清理

-XX:CMSInitiatingOccupancyFraction设置触发GC的阈值如果不幸内存预留空间不够,就会引起

concurrent mode failure

CMS回收失败,串行回收器就会变成他的他的后备回收器,几次FullGC后,,进行一次碎片的整理,整理过

程是独占的,会引起停顿

-XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次整理整理过程是独占的,会引起停顿时间变长

-XX:+CMSFullGCsBeforeCompaction 设置进行几次Full GC后,进行一次碎片整理:

-XX:ParallelCMSThreads设定CMS的线程数量



 5.G1垃圾回收器

 

Garbage-First

在JDK 1.7正式引入

关注停顿时间

 

参数

-XX:+UseG1GC

-XX:MaxGCPauseMillis

-XX:ParallelGCThreads

 

G1垃圾回收器的特点

新生代GC

并发标记周期

混合收集,新生代和老年代一起回收

如果需要,可能会进行Full GC

 

G1的新生代回收


 

G1初始标记, G1初始标记是会进行新生代垃圾回收的

G1混合回收,G1在并发标记后会进行新生代和老年代的混合垃圾回收


 

 

GC参数整理

-XX:+UseSerialGC:在新生代和老年代使用串行收集器

-XX:SurvivorRatio:设置eden区大小和survivior区大小的比例

-XX:NewRatio:新生代和老年代的比

-XX:+UseParNewGC:在新生代使用并行收集器

-XX:+UseParallelGC :新生代使用并行回收收集器

-XX:+UseParallelOldGC:老年代使用并行回收收集器

-XX:ParallelGCThreads:设置用于垃圾回收的线程数

-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器

-XX:ParallelCMSThreads:设定CMS的线程数量

-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发

-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理

-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩

-XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收

-XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收

-XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收

 

  • 大小: 19 KB
  • 大小: 27.4 KB
  • 大小: 30.2 KB
  • 大小: 37.9 KB
  • 大小: 17.2 KB
  • 大小: 15.9 KB
  • 大小: 15 KB
  • 大小: 15 KB
分享到:
评论

相关推荐

    JMV Screen Capturing-crx插件

    语言:português (Brasil) 在任何HTTP域上捕获全屏或特定应用程序的屏幕! 编码器网络没有任何控制权

    jmv:R的jamovi

    MV 该模块代表jamovi随附的分析。 它包含许多常见的统计检验(例如t检验,ANOVA,相关矩阵,比例检验,列联表等)。... jmv可以通过以下方式安装: install.packages('jmv')jmv文档可以在jamovi网站上找到:

    Mirillis Action! 1.3.0.0破解版(屏幕录像软件)

    4、内置“游戏录制、活动桌面、自定义区域”录制模式功能,使用便捷! 5、支持NVIDIA CUDA™ 和 Intel Quick Sync Video technologies硬件加速功能! 6、支持屏幕戴、游戏截图自动保存,不会打断正在运行的游戏及...

    maven3.6.1

    maven3.6.1包,由于官网下载资源太慢,上传资源用于共享

    JVM Diagnostics Guide 1.4.2

    JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2

    ConsoleJMXMonitor

    控制台JMX监视器 极简控制台应用程序,通过 JMX 显示堆和线程。 带PID的本地JMV 带有 url 的远程 JVM 选项 : -Djmx.service.host=localhost -Djmx.service.port=9990 -djmx.service.url=service:jmx:remote+...

    最新版JamVM 1.5.2

    JamVM is a new Java Virtual Machine which conforms to the JVM specification version 2 (blue book). In comparison to most other VMs (free and commercial) it is extremely small, with a stripped ...

    JAVA JVM文件

    JAVA 的JMV文件如果缺少大家可以下载

    超级解霸播放软件

    强大的解压VCD/DVD播放器,支持RM/RMVB/MOV/SWF/MP3/WMA等目前Windows流行的音视频格式的播放。...JMV视频加密技术,实现视频文件的密码加密,预览等多种应用。----骨灰级的,,1990-2002年开始上网的朋友的怀旧

    IBM HeapAnalyzer

    IBM HeapAnalyzer,很好用的JMV分析工具,IBM HeapAnalyzer允许寻找可能存在的Java堆泄漏区域,通过启发式搜索的引擎和分析Java应用程序的Java堆内存

    Android-App-Download-Image-from-the-url:Android应用程序可从URL下载图像

    Android应用程序从URL下载图像Android应用程序可从URL下载图像

    JAVA2深度历险.

    对JAVA内部机制的一个介绍

    JVM调优.pptx

    JVM调优分享,简单的一些分享,希望能帮助大家。凑字数真的烦!!!

Global site tag (gtag.js) - Google Analytics