JVM学习3--GC参数及收集器

一、串行收集器

  -XX:+UseSerialGC 

  从第二张图的时间可以看出来,复制算法的效率要比标记压缩算法高的多。

二、并行收集器

  -XX: +UseParNewGC (新生代并行,老年代串行)

  -XX: +UseParallelGC (新生代并行,老年代串行)

  -XX: +UsePrallelOldGC (新生代老年代都是串行)

  注意:多线程不一定更快,这就跟写程序一样,要注意使用场景。

  图示:

  

  注意图中红字,PSYoungGen和ParOldGen表示新生代老年代都用的并行收集器,所以此时的GC参数是 -XX: UseParallelOldGC。

三、CMS收集器(默认不使用,一般作为老年代串行收集器的后备)

  图示:

四、GC参数整理

  • -XX: +UseSerialGC:新生代和老年代使用串行收集器
  • -XX: +SurvivorRatio: 设置survivor区和eden区大小比率
  • -XX: +NewRatio: 新生代和老年代的比率
  • -XX: +UseParNewGC: 新生代使用并行收集器
  • -XX: +UseParallelGC: 新生代使用并行收集器
  • -XX: +UsePrallelOldGC: 老年代使用并行收集器
  • -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回收

原文地址:https://www.cnblogs.com/NoYone/p/8971770.html

时间: 2024-08-30 07:13:49

JVM学习3--GC参数及收集器的相关文章

深入JVM系列(二)之GC机制、收集器与GC调优(转)

一.回顾JVM内存分配 需要了解更多内存模式与内存分配的,请看 深入JVM系列(一)之内存模型与内存分配 1.1.内存分配: 1.对象优先在EDEN分配2.大对象直接进入老年代 3.长期存活的对象将进入老年代 4.适龄对象也可能进入老年代:动态对象年龄判断 动态对象年龄判断: 虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold才能晋升到老年代,当Survivor空间的相同年龄的所有对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代

深入JVM系列(二)之GC机制、收集器与GC调优

一.回想JVM内存分配 须要了解很多其它内存模式与内存分配的,请看 深入JVM系列(一)之内存模型与内存分配 1.1.内存分配: 1.对象优先在EDEN分配 2.大对象直接进入老年代 3.长期存活的对象将进入老年代 4.适龄对象也可能进入老年代:动态对象年龄推断 动态对象年龄推断: 虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold才干晋升到老年代,当Survivor空间的同样年龄的全部对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就能够直接进入

JVM(2)——GC算法和收集器

一.引入 上篇博客<JVM--简介>中主要介绍了JVM的内存模型,思考一下: 为什么要划分堆.栈.方法区等? 为什么把不同种类的数据信息分别存放? 答案可以分为很多很多条,这里就说一个方面,如果我们是如何区分数据的种类的,那就是作用域.比如:堆.方法区是线程共享的,而栈是私有的. 那么管理又包括哪些方面呢?包括创建.存储.回收?这篇博客就来谈谈垃圾回收(Garbage Collection). 小编建议各位读者把自己当成GC,那个以回收垃圾为工作的人,这么说貌似有点-- 二.算法 问自己三个问

JVM学习之GC常用算法

出处:博客园左潇龙的技术博客--http://www.cnblogs.com/zuoxiaolong,多谢分享 GC策略解决了哪些问题? 既然是要进行自动GC,那必然会有相应的策略,而这些策略解决了哪些问题呢,粗略的来说,主要有以下几点. 1.哪些对象可以被回收. 2.何时回收这些对象. 3.采用什么样的方式回收. GC策略采用的何种算法 有关上面所提到的三个问题,其实最主要的一个问题就是第一个,也就是哪些对象才是可以回收的,有一种比较简单直观的办法,它的效率较高,被称作引用计数算法,其原理是:

JVM学习之GC

GC两种较常用的垃圾标记算法: 引用计数器: 每一个对象都有一个私有的引用计数器,当被其它存活对象引用时,引用计数器的值加1,不再引用-1,如果值为0标记为垃圾对象 弊端:互相引用会造成无法释放掉,极可能引发内存泄漏 根搜索算法: 以根对象集合作为起始点.按照从上到下的方式搜索被根对象集合所链接的目标对象是否可达,如果目标对象不可达,就意味着该对象死亡 根对象集合包含: Java栈中的对象引用.本地方法栈中的对象引用.运行时常量池中的对象引用.方法区中类静态属性的对象引用.与一个类对应的唯一数据

深入JVM虚拟机(四) Java GC收集器

深入JVM虚拟机(四) Java GC收集器 1 GC收集器 1.1 Serial串行收集器 串行收集器主要有两个特点:第一,它仅仅使用单线程进行垃圾回收:第二,它独占式的垃圾回收. 在串行收集器进行垃圾回收时,Java 应用程序中的线程都需要暂停("StopThe World"),等待垃圾回收的完成,这样给用户体验造成较差效果.虽然如此,串行收集器却是一个成熟.经过长时间生产环境考验的极为高效的收集器.新生代串行处理器使用复制算法,实现相对简单,逻辑处理特别高效,且没有线程切换的开销

深入浅出 JVM GC(4)常用 GC 参数介绍

# 前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我们的那些参数或者说选项,这些参数将会改变 GC 的运行方式.因此,他们显得极为重要. 我们将每一个垃圾收集器相关的参数一个一个娓娓道来,注意,楼主推荐一个小程序:前阿里 JVM 大神寒泉子的公众号里面有个小程序------JVM Pocket,这个小程序介绍了所有的 JVM 参数的作用,你可以在里面

JVM收集器概述

Serial 收集器 Serial 是一个新生代收集器 :单线程垃圾回收器,采用复制算法 -XX:+UseSerialGC ParNew 收集器 ParNew 是一个新生代收集器:ParNew收集器其实是Serial收集器的多线程版本,其余行为包括Serial收集器可用的所有控制参数.收集算法.stop the world.对象分配规则,回收策略等都与Serial收集器完全一样: 控制参数有如下: -XX:+UseParNewGC -XX:SurvivorRatio //新生代中Edge区域Su

HotSpot VM GC收集器的合名问题

最近分析HotSpot VM GC日志,就各种收集器的名称搞晕掉了,幸好参考R大(RednaxelaFX )一些回复和文章.整理在此文,以方便自已日后查阅,也可让有需要的同学少走弯路,追本溯源,一切从DefNew的来因说起. DefNew: 是使用-XX:+UseSerialGC(新生代,老年代都使用串行回收收集器) ParNew: 是使用-XX:+UseParNewGC(新生代使用并行收集器,老年代使用串行回收收集器)或者-XX:+UseConcMarkSweepGC(新生代使用并行收集器,老