ImageVerifierCode 换一换
格式:PPT , 页数:37 ,大小:4.66MB ,
资源ID:2629920      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2629920.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第3讲深入理解jvm垃圾收集算法与垃圾收集器PPT课件.ppt)为本站会员(微传9988)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第3讲深入理解jvm垃圾收集算法与垃圾收集器PPT课件.ppt

1、第3讲-深入理解JVM垃圾收集算法与垃圾收集器,软件工程系 潘正军,主要内容大纲,概述 对象已死吗 垃圾收集算法 垃圾收集器,一、概述,说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情:,二、JVM运行时数据区,2.1 引用计数算法 2.2 根搜索算法 2.3 我们需要做什么? 2.4 再谈引用 2.5 强引用 2.6 软引用 2.7 弱引用 2.8 虚引用,二

2、、对象已死吗,2.1 引用计数算法,2.1 引用计数算法,2.2 根搜索算法,2.3 我们需要做什么,2.4 再谈引用,2.5 强引用(StrongReference),2.6 软引用(SoftReference),2.7 弱引用 (WeakReference),2.8 虚引用(PhantomReference),三、垃圾收集算法,3.1 标记-清楚算法 3.2 标记-整理算法 3.3 复制算法 3.4 分代收集算法,3.1 标记-清除算法,3.1 标记-清除算法,3.2 标记-整理算法,3.3 复制算法,3.3 复制算法,3.3 复制算法,3.4 分代收集算法,四、垃圾收集器,4.1 Ser

3、ial收集器(串行收集器) 4.2 ParNew收集器(并行收集器) 4.3 Parallel Scavenge收集器 4.4 Serial Old收集器 4.5 Parallel Old收集器 4.6 CMS(Concurrent Mark Sweep)收集器 4.7 G1收集器,4.1 Serial收集器(串行收集器),新生代收集器,单线程收集器,使用复制算法,虚拟机-client模式下新生代的默认回收器。 单线程进行垃圾收集,并且在其进行垃圾收集时,必须暂停其它所有工作线程,直到垃圾收集结束,这一过程(stop the world)由虚拟机在后台自动发起自动完成,会在用户不可见的条件下把

4、用户所有正常工作线程全部停掉。当然如果停顿的时间很短是可以接受的,但是如果每次停顿5分钟,任何人都会崩溃。 对于某些客户端程序,新生代占用的内存空间往往很小,此时停顿时间完全可以控制在毫秒级别,因此对于运行在client模式下的虚拟机,Serial收集器是个不错的选择。 优点:简单高效(相对于其它收集器运行于单CPU环境下。没有线程分配的开销,可以获得最高的单线程垃圾收集效率),4.2 ParNew收集器(并行收集器),新生代收集器,多线程收集器,使用复制算法。 Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为与Serial收集器完全一样,依然会stop the worl

5、d。 很多虚拟机-server模式下的首选新生代收集器,主要原因是CMS收集器(老年代收集器)只能与Serial收集器或者ParNew收集器配合使用 默认开启的回收线程数与CPU个数相同(现代服务器动辄32个逻辑CPU将会导致ParNew收集器开启32个收集线程,这种情况下最好限制下收集线程个数) -XX:ParallelGCThreads 多线程垃圾收集器内存回收开启的线程数量。,4.3 Parallel Scavenge收集器,新生代收集器,多线程收集器,使用复制算法。 该收集器的关注点与其它收集器的关注点不同,其它收集器的目标为尽可能缩短垃圾收集时用户线程的停顿时间,该收集器的目标为达到

6、一个可控的吞吐量,吞吐量=运行用户代码时间/(运行用户代码时间+垃圾回收时间) 吞吐量大能够最高效的利用CPU时间,尽快完成运算任务,适合后台运算、交互不多的应用。 停顿时间短则响应速度快,适合与用户交互比较多的应用。,4.3 Parallel Scavenge收集器,GC拥有自适应调节策略。如果启用该策略,只需要设置好基本参数(-Xmx等),然后设置一个优化目标(最大垃圾收集时间或吞吐量大小),虚拟机会根据当前系统的运行状况收集性能监控信息,动态调整细节参数设置以提供最合适的停顿时间和最大吞吐量。 例如:-XX:SurvivorRatio 新生代中Eden区与Survivor区的大小比率,默

7、认为8,即Eden:survivor=8:1、-XX:PretenureSizeThreshold直接晋升老年代对象大小,超过这个大小的对象将直接在老年代分配,只有Serial和ParNew收集器认识这个参数、-XX:MaxTenuringThreshold 晋升老年代对象年龄,每个对象在坚持过一次Minor GC后对象年龄+1,超过设置数值对象移动至老年代。 -XX:MaxGCPauseMillis 最大停顿时间,仅对Parallel Scavenge收集器生效 -XX:GCTimeRatio 吞吐量大小,默认值为99,即1%的GC时间,仅对Parallel Scavenge收集器生效 -X

8、X:+UseAdaptiveSizePolicy 使用GC自适应调节策略,4.4 Serial Old收集器,老年代收集器,单线程收集器,使用标记-整理算法Serial收集器的老年代版本作为CMS收集器的后备收集器:当CMS收集器产生Concurrent Mode Failure时,将临时启动Serial Old收集器重新进行老年代的垃圾收集,4.5 Parallel Old收集器,老年代收集器,多线程收集器,使用标记-整理算法JDK1.6提供,Parallel Scavenge收集器的老年代版本在注重吞吐量或CPU资源敏感的场合,可以优先考虑Parallel Scavenge收集器 + Pa

9、rallel Old收集器,4.6 CMS(Concurrent Mark Sweep)收集器,老年代收集器,使用标记-清除算法,多线程并发收集器,以达到最短的垃圾收集挺停顿时间为目标的收集器。 该收集器的收集过程分为4个步骤: 1,初始标记 CMS initial mark:该步会stop the world,但耗时非常短,标记GC Root直接关联的对象 2,并发标记 CMS concurrent mark:耗时较长,用户线程可同时运行,标记至GC Root有可达路径的对象 3,重新标记 CMS remark:该步会stop the world,但耗时非常短。由于步骤2用户线程同步运行,此

10、时主要修正因步骤二同步用户线程产生的对象标记变动 4,并发清除 CMS concurrent sweep:耗时较长,用户线程可同时运行 在耗时很长的并发标记阶段和并发清除阶段用户线程和收集线程都可同时工作,故而总体上来说,CMS收集器的内存回收是与用户线程一起并发执行的,4.6 CMS(Concurrent Mark Sweep)收集器,虽然收集停顿时间短,但是也有不少缺点:1,对CPU资源敏感,CMS收集器默认开启的收集线程数为(CPU数量+3)/4,如果CPU数量较少,会占用不少CPU处理资源 2,无法处理浮动垃圾,并且可能产生Concurrent Mode Failure从而导致另一次F

11、ull GC。 并发清除时(步骤4),用户线程是可以同时运行的,此时用户线程会产生新的垃圾,这部分垃圾在标记过程之后产生,本次GC已经不能进行标记后清除,只能留到下次GC时处理,被称为浮动垃圾 由于CMS的收集线程执行时,用户线程也是会同时执行的,导致CMS收集器无法像其它老年代收集器那样在老年代内存几乎耗尽时在进行GC,必须为用户线程预留部分内存(默认使用68%内存就会开启收集过程),如果预留内存无法满足用户线程的执行,将会出现Concurrent Mode Failure,此时虚拟机将会启动备用方案,调用Serial Old收集器执行一次Full GC,这将导致较长的收集停顿 -XX:CM

12、SInitiationgOccupancyFraction 设置GC触发的百分比,默认为68%,太高会导致过多的Concurrent Mode Failure,太低则影响性能,仅对CMS收集器生效 3,由于采用标记-清除算法实现,会产生内存碎片 -XX:+UseCMSCompactAtFullCollection Full GC后提供内存整理,该过程是无法并发的,会导致性能下降,仅对CMS收集器生效 -XX:+CMSFullGCsBeforeCompation 设置进行完几次不进行压缩的Full GC后,进行一次附带压缩的Full GC,仅对CMS收集器生效,4.7 G1收集器,使用标记-整理

13、算法,不会产生内存碎片 可以非常精确的设定垃圾收集停顿时间:在一个长度为X毫秒的时间片内,垃圾收集最多消耗Y毫秒(比起Parallel Scavenge收集器单纯的一个最大停顿时间,真是精确太多了) 不同于其它收集器的收集范围为整个新生代或老年带,G1收集器将堆(包括新生代以及老年带)分为多个大小固定的区域,跟踪区域中的垃圾堆积情况并在后台维护一个优先级列表,每次根据允许的垃圾收集时间优先收集优先级最高的区域,这样可以保证在在有限的时间内获得最高的收集效率,4.8 收集器组合使用总结,总结: Minor GC : 发生在新生代的GC,非常频繁,速度很快Full GC/Major GC :发生在老年代的GC,一般会比Minor慢10倍以上,4.9 理解GC日志,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多技术含量。 每一种收集器的日志形式都是由它们自身的实现所决定的,换而言之,每个收集器的日志格式都可以不一样。 但虚拟机设计者为了方便用户阅读,将各个收集器的日志都维持一定的共性,例如以下两段典型的GC日志:,4.9 理解GC日志,态度决定命运,专注成就人生!谢谢!,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报