JVM提供了诸多的参数进行JVM各个方面内存大小的设置,为Java应用进行优化提供了诸多的工具,本文将会详细分析各个参数的功能与使用。
1、常见参数说明:
-Xms: //堆内存初始化大小
-Xmx: //堆最大可用内存
-Xmn: //新生代堆最大可用内存
-XX:UseSerialGC //设置新生代中:Eden空间、SurvivorRadio From空间、SurvivorRadio To空间的占比
-XX:NewRatio //设置新生代空间和老年代空间的占比
-XX:+PrintGC //每次触发GC的时候打印相关日志
-XX:+UseSerialGC //串行回收
-XX:+PrintGCDetails //打印详细Gc日志
2、-XX:+PrintGCDetails 使用示例
2.1 在IDEA 中新建一个测试类Test,并配置VM参数

2.1 然后运行这个类:

Heap
//新生代大小PSYoungGen      total 57344K, used 6889K [0x0000000780780000, 0x0000000784780000, 0x00000007c0000000)//eden 大小eden space 49152K, 14% used [0x0000000780780000,0x0000000780e3a470,0x0000000783780000)//Survivor From 大小from space 8192K, 0% used [0x0000000783f80000,0x0000000783f80000,0x0000000784780000)//Survivor To 大小to   space 8192K, 0% used [0x0000000783780000,0x0000000783780000,0x0000000783f80000)//老年代大小ParOldGen       total 131072K, used 0K [0x0000000701600000, 0x0000000709600000, 0x0000000780780000)object space 131072K, 0% used [0x0000000701600000,0x0000000701600000,0x0000000709600000)Metaspace       used 3269K, capacity 4496K, committed 4864K, reserved 1056768Kclass space    used 351K, capacity 388K, committed 512K, reserved 1048576KProcess finished with exit code 0/**说明
1. 新生代中: enden :Survivor from :Survivor To  = 8 : 1 : 1  (默认);  可以通过-XX:SurvivorRadio来配置;如:-XX:SurvivorRadio = 2  表示 enden :Survivor from :Survivor To  = 2 : 1 : 12.新生代与老年代默认大小比例为: 1(PSYoungGen) : 2(ParOldGen) ;  可以通过-XX:NewRadio来配置;如:-XX:NewRadio = 2 表示 PSYoungGen :ParOldGen = 1:2
*/

3、设置堆初始化和最大内存参数 -Xms -Xmx
我们可以根据项目和服务器的配置,使用 -Xms -Xmx来配置 堆初始化内存大小 和 堆最大内存大小;
一般都是将 -Xms 的大小 配置成 与 -Xmx一致,这样可以减少程序运行时垃圾回收的次数,提高程序运行效率
4、设置垃圾收集器参数
常见的垃圾回收器:
4.1:serial 收集器: 串行收集器
-XX:+UseSerialGC
parNew收集器:多线程版的Serial收集器 (JDK1.8已经弃用)
-XX:+UseParNewGC
4.2:parallel 收集器:
-XX:+UseParallelGC
4.3:cms(Concurrent Mark Sweep)收集器:
-XX:+UseConcMarkSweepGC
4.4:g1收集器:
-XX:+UseG1GC

各个垃圾回收器的说明(参考了某蚁的资料)
serial 收集器:
串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-整理;垃圾收集的过程中会Stop The World(服务暂停)
一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束。
特点:CPU利用率最高,停顿时间即用户等待时间比较长。
适用场景:小型应用
通过JVM参数-XX:+UseSerialGC可以使用串行垃圾回收器。
parallel 收集器(JDK1.8 已经弃用)
ParNew收集器其实就是Serial收集器的多线程版本。新生代并行,老年代串行;新生代复制算法、老年代标记-整理
parallel 收集器
Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。可以通过参数来打开自适应调节策略,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量;也可以通过参数控制GC的时间不大于多少毫秒或者比例;新生代复制算法、老年代标记-整理
采用多线程来通过扫描并压缩堆
特点:停顿时间短,回收效率高,对吞吐量要求高。
适用场景:大型应用,科学计算,大规模数据采集等。
cms(Concurrent Mark Sweep)收集器
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用都集中在互联网站或B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。
从名字(包含“Mark Sweep”)上就可以看出CMS收集器是基于“标记-清除”算法实现的,它的运作过程相对于前面几种收集器来说要更复杂一些,整个过程分为4个步骤,包括:
初始标记(CMS initial mark)
并发标记(CMS concurrent mark)
重新标记(CMS remark)
并发清除(CMS concurrent sweep)
其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。
由于整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行。老年代收集器(新生代使用ParNew)
优点:并发收集、低停顿
缺点:产生大量空间碎片、并发阶段会降低吞吐量

采用“标记-清除”算法实现,使用多线程的算法去扫描堆,对发现未使用的对象进行回收。
(1)初始标记
(2)并发标记
(3)并发预处理
(4)重新标记
(5)并发清除
(6)并发重置
特点:响应时间优先,减少垃圾收集停顿时间
适应场景:大型服务器等。
g1收集器
在G1中,堆被划分成 许多个连续的区域(region)。采用G1算法进行回收,吸收了CMS收集器特点。
特点:支持很大的堆,高吞吐量
–支持多CPU和垃圾回收线程
–在主线程暂停的情况下,使用并行收集
–在主线程运行的情况下,使用并发收集
实时目标:可配置在N毫秒内最多只占用M毫秒的时间进行垃圾回收
注意: 并发是指一个处理器同时处理多个任务。
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。
来个比喻:并发是一个人同时吃三碗饭,而并行是三个人同时吃三碗饭。

JVM调优之参数配置: -Xms -Xmx -Xmn -XX:+PrintGCDetails -XX:UseSerialGC -XX:SurvivorRadio -XX:NewRadio相关推荐

  1. JVM调优和参数配置

    1.JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots    答:什么是垃圾:简单的说就是内存中已经不再被使用到的空间就是垃圾        要进行垃圾回收,如何判断一个对象是否可以被回 ...

  2. java xms xmx xmn_JAVA 虚拟机JVM参数调优(1)-Xms -Xmx -Xmn

    随着服务器内存和CPU核数据越来越多,如何充分利用服务器硬件资源?如下图所示JAVA官方公布图一,说明单个CPU服务器垃圾收集造成吞吐量降低1%,30核CPU效率下降20%,查看下图中红色线条. 本文 ...

  3. JVM调优常用参数配置

    2019独角兽企业重金招聘Python工程师标准>>> 堆配置 -Xms:初始堆大小 -Xms:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n: ...

  4. JVM的进阶学习(GC Roots、JVM调优与参数配置、)

    1. GC Roots,可达性分析 从GC roots的对象作为起始点,从GC Roots对象开始向下搜索,如果一个对象到GCRoots没有任何引用链相连,则说明对象不可用.即给定一个集合的引用作为根 ...

  5. java面试-JVM调优和参数配置

    JVM的参数类型: 1.标配参数: java -version java -help 2.X参数: -Xmixed 混合模式 -Xint  解释执行 -Xcomp 第一次使用就编译成本地代码 3.XX ...

  6. JVM调优的基本配置参数

    目录 Java中可以作为GC Roots的对象有哪些 JVM调优 JVM常用的基本配置参数有哪些 什么是GC Roots 因为确立垃圾的方法有引用记数法,但是会产生循环引用,所以引出了另一种方法叫可达 ...

  7. JVM调优及参数设置

    (1)参数 -Xms:初始堆大小 -Xmx :最大堆大小 此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存 -Xmn :年轻代大小 整个堆大小=年轻代大小 + 年老代大小 + 持 ...

  8. JVM调优-GC参数

    一.Throughput收集器(吞吐量) -XX:+UseParallelGC -XX:+UseParallelOldGC *参数调整:通过调整堆大小,减少GC停顿时间,增大吞吐量 增强堆大小可以减少 ...

  9. Tomcat调优常见参数配置

    Tomcat 是一个流行的 Web 应用服务器,以下是一些常见的 Tomcat 配置参数: 1.端口配置 HTTP 端口:tomcat 默认使用 8080 端口,可以通过修改 server.xml 文 ...

最新文章

  1. 【Java】排序算法 之 【归并排序】 总结
  2. thinkphp整合swoole
  3. day25 Python四个可以实现自省的函数,反射
  4. 关系数据库是如何工作的
  5. 2018Alibaba数学竞赛-决赛试题
  6. 127. Word Ladder
  7. leetcode39. 组合总和
  8. 执行git命令时出现fatal: ‘origin‘ does not appear to be a git repository错误
  9. python classmethod_对Python中的@classmethod用法详解
  10. android seekbar 代码设置高度,Android - 如何更改默认的SeekBar厚度?
  11. 小波多尺度分析的发明:跨学科创新的典范
  12. 浅谈北美油气行业1--加拿大
  13. vss服务器状态失败_VSS常犯错误(转载)
  14. php内存设置,修改php运行内存大小的限制
  15. 不会吧不会吧,不会有人连线程池都没听说过吧
  16. 商用三相水表行业调研报告 - 市场现状分析与发展前景预测
  17. IDEA光标变成白色粗条的问题解决
  18. Java岗大厂面试百日冲刺【Day49】— 十个面试九个秒杀1 (日积月累,每日三题)
  19. Echarts3.0入门基础与实战(学习笔记)
  20. python共轭复数_python print出共轭复数的方法详解

热门文章

  1. 什么是ARP?ARP作用和使用场景
  2. 疫情可视化part1
  3. 做个火影般的架构师,阿里内网疯狂传阅的“M8级”分布式架构笔记
  4. 动物识别系统代码python_动物识别系统代码
  5. python hook pc微信_一起来用python玩一波微信呀 | 防撤回, 好友分析, 聊天机器人~...
  6. 记一次Maven发布Jar包中文乱码解决方法
  7. 【Layui】操作成功后返回父级并且刷新
  8. 运行 c++ 程序出现“Failed to execute ”.exe“ Error 0:操作成功完成
  9. 使用Python批量实现某一Excel文件中每3行数据存一个Excel文件
  10. 关于source insight、添加.s和.S文件,显示全部路径、加入项目后闪屏幕