大学生创新创业大赛观后感,seo网站优化服务,wordpress响应式视频主题,开远市新农村数字建设网站垃圾回收器
说完垃圾回收算法接下来就需要对应的垃圾回收器去回垃圾回收器。接下来介绍几种垃圾回收器
1、Serial
串行回收器#xff0c;是单线程版本#xff0c;暂停所有的应用。在单CPU的情况下效率是很高的#xff0c;因为不涉及线程的上下文切换。适用于小型程序和客…垃圾回收器
说完垃圾回收算法接下来就需要对应的垃圾回收器去回垃圾回收器。接下来介绍几种垃圾回收器
1、Serial
串行回收器是单线程版本暂停所有的应用。在单CPU的情况下效率是很高的因为不涉及线程的上下文切换。适用于小型程序和客户端应用不太适合Java Web。Serial使用的垃圾回收算法是新生代复制算法老年代标记整理
2、ParNew
作用于新生代的在Serial的基础上改为了多线程版本使用多个线程进行垃圾回收。适用于大型应用和Web 程序在单核CPU的效率比Serial效率低因为涉及到了线程的上下文切换。
3、Parallel
全称 Parallel Scavenge是一种多线程的收集器和ParNew收集器类似是一个新生代的
4、Parallel Old
是Parallel的老年代版本
5、CMSConcurrent Mark Sweep
是一种并发的垃圾回收器用的是标记-清除法。JDK11之后被废弃了用于老年代的垃圾回收。停顿时间比较短。过程如下
初始标记标记与GCRoot直接关联的的对象注意是直接关联间接的不会被标记此时会触发STW。并发标记与用户线程并发这里是从与GCRoot直接关联的对象开始扫描而不是从GCRoot开始。重新标记会触发STW因为第二步可能会导致一些对象错标或者漏标。并发清除与用户线程并发 6、新一代垃圾回收器G1
全称Garbage First在不同区域分配垃圾回收。G1垃圾回收器保留了分代思想但是取消了新生代和老年代的物理划分把内存分为多个区域Region区域中的逻辑包含了新生代和老年代。区域是动态变化的原先是老年代的区域在之后可能会变成新生代实现更精细化的内存划分。
G1整体采用标记整理算法局部采用标记复制算法所以不会产生内存碎片。G1垃圾回收器会把内存分为大约2048个区域Region。
同时新增了名为Humongous的内存区域用于存储大对象如果一个H区域装不下则G1会查询连续的H区域去存储该对象为了找到连续的空间可能会触发Full GC。
G1提供了三种模式的垃圾回收模式
Young GC与其它垃圾回收器不同其他垃圾回收器是当Eden区满了触发Young GC 而G1则是会预测Eden区回收要多久如果接近参数配置的时间则会触发Young GC。回收的算法是采用标记复制算法。Mix GC 混合GC多数对象晋升到老年代后为了避免内存耗尽会触发Full GC回收整个Young Region和部分的Old Region。触发条件当老年代对象占比超过阈值可配置Full GC对老年代进行垃圾回收采用标记、清除、压缩相对来说比较耗时。
总结在Yong GC和Mix GC模式下G1会对每个Region存活对象进行统计。根据存活对象和闲置的Region数量动态的决定垃圾回收的区域和顺序。这种动态策略可以尽可能的减少Full GC。过程如下