前言

仅列出常用JVM调优参数,更多请转文末的官方文档链接。

堆内存

  • -Xmx,设置最大堆内存,默认为物理内存的1/4。示例:-Xmx4096m,设置为4G
  • -Xms,设置初始内存,默认为物理内存的1/64。此值可以和-Xmx相同,避免每次gc后JVM重新分配内存。
  • -Xmn,设置年轻代堆内存,Sun官方推荐配置年轻代大小为整个堆的3/8。示例:-Xmn1536m
  • -XX:SurvivorRatio,设置年轻代中Eden和Survivor区的比值,默认为8。示例:-XX:SurvivorRatio=8,Survivor区和Eden区的比值为8,survivor区占年轻代的1/9
  • -XX:NewRatio,设置老年代和年轻代的比值,默认为2。Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。示例:-XX:NewRatio=4,年轻代和年老代的比值为4,年轻代占整个堆的1/5。
  • -XX:MaxTenuringThreshold,设置垃圾最大年龄。最大值为15。对于并行收集器默认值为15,对于CMS收集器默认值为6。年龄较低时更容易从年轻代到年老代,对于年老代型应用能提高效率;较高时会增加对象在年轻代的存活时间,增加在年轻代就被回收的概率。

非堆内存

  • -XX:MetaspaceSize,设置元空间初始值。示例:-XX:MetaspaceSize=512M
  • -XX:MaxMetaspaceSize,设置元空间最大值。示例:-XX:MaxMetaspaceSize=512M

线程栈内存

  • -Xss,设置线程栈内存,JDK5.0之前是256K,JDK5.0后每个线程大小为1M。线程栈内存大小会限制线程的数量,更小的线程栈会有更多的线程数。线程栈内存过大或者过小都会导致内存溢出。一般小的应用, 如果栈不是很深, 应该是128k够用的大的应用建议使用256k。示例:-Xss128k

GC收集器

  • -XX:+UseSerialGC,设置串行收集器。适用场景:内存小于100M;单核、单机程序,并且没有停顿时间的要求
  • -XX:+UseConcMarkSweepGC,设置并发收集器,开启该参数后会自动将-XX:+UseParNewGC打开。即:ParNew(Young区)+ CMS(Old区)的组合。适用场景:多CPU、追求低停顿时间、快速响应
  • -XX:+UseParallelGC,设置并行收集器。JVM默认的收集器。适用场景:多CPU、高吞吐量、允许停顿时间超过1秒
  • -XX:+UseG1GC,设置G1收集器,适合多核大内存机器(至少6G堆内存),致力于解决串行收集器、并发收集器和CMS收集器的缺陷,官方推荐,性能高。

没有万能的收集器,只有适合的收集器。

辅助参数

  • -verbose:class,显示每个load classes的信息
  • -verbose:gc,显示每次gc的简要信息。约等于-XX:+PrintGC
  • -XX:+PrintGCDetails,打印每次gc的详细信息。
  • -XX:+PrintGCTimeStamps,打印程序启动到GC发生的时间,搭配-XX:+PrintGCDetails使用
  • -XX:+PrintGCDateStamps,打印GC发生时的时间戳,搭配-XX:+PrintGCDetails使用
  • -XX:+PrintHeapAtGC ,打印GC前后的堆信息
  • -XX:+PrintGCApplicationStoppedTime,打印GC时线程的停顿时间
  • -XX:+PrintTenuringDistribution,打印JVM在每次MinorGC后当前使用的Survivor中对象的年龄分布
  • -Xloggc,指定gc日志文件的路径,适用该参数会自动激活-verbose:gc。示例:-Xloggc:/home/logs/gc.log
  • -XX:+HeapDumpOnOutOfMemoryError:内存出现OOM时生成Heap转储文件
  • -XX:HeapDumpPath:设置Heap转储文件的路径。示例:-XX:HeapDumpPath=/home/tmp/test.hprof

其它

  • -XX:+PrintFlagsInitial:打印所有XX选项的默认值
  • -XX:+AggressiveOpts,加快编译,优化代码(Enables the use of aggressive performance optimization features
  • -XX:-UseBiasedLocking。启用偏向锁。默认是打开的。

参考

JVM常用运行时参数说明的更多相关文章

  1. JVM<一>----------运行时数据区域

    参考:1.JVM Specification: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5 2.< ...

  2. JVM入门——运行时数据区

    这张图我相信基本上对JVM有点接触的都应该很熟悉,可以说这是JVM入门的第一课.其中的“堆”和“虚拟机栈(栈)”更是耳熟能详.下面将围绕这张图对JVM的运行时数据区做一个简单介绍. 程序计数器(Pro ...

  3. JVM学习-运行时数据区域

    目录 前言 运行时数据区 程序计数器 Java虚拟机栈 局部变量表 基础数据类型 对象引用 returnAddress 操作数栈 动态链接 方法返回地址 Java堆 方法区 类型信息 字段描述符 方法 ...

  4. 深入理解JVM(2)——运行时数据区

    1.运行时数据区 1.1.程序计数器 记录当前线程正在执行的字节码指令的地址,如果正在执行的是 Native 方法,这个计数器值则为空. 1.2.虚拟机栈 每个 Java 方法在执行的同时会创建一个栈 ...

  5. jvm理论-运行时数据区

    三大流行jvm sun HotSpot ibm j9 BEA JRockit Oracle 会基于HotSpot整合 JRockit. jvm运行时数据区 java虚拟机所管理的内存将会包括以下几个运 ...

  6. java架构之路-(JVM优化与原理)JVM的运行时内存模型

    还是我们上次的图,我们上次大概讲解了类加载子系统的执行过程,验证,准备,解析,初始化四个过程.还有我们的双亲委派机制. 我们这次来说一下运行时内存模型.上一段小代码. public class Mai ...

  7. JVM笔记-运行时内存区域划分

    1. 概述 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域.它们各有用途,有些随着虚拟机进程的启动一直存在(堆.方法区),有些则随着用户线程的启动和结束而建立 ...

  8. JVM虚拟机-运行时数据区概述

    目录 运行时数据区域 总览 概念扫盲 什么是栈帧(Stack Frame) JVM常见出现两种错误 程序计数器 虚拟机栈 结构 局部变量表 方法是如何调用的 本地方法栈 堆 浅堆和深堆 堆的细分 方法 ...

  9. JVM之运行时常量池(Runtime Constant Pool)

    基本特性: 方法区的一部分,在方法去中分配,加载泪或者接口后就创建运行时常量区. class文件每一个类或接口的常量池表(constant_pool table)的运行时表现形式, 包括编译期的数值字 ...

  10. JVM之运行时数据区

    Java虚拟机运行时数据区包括PC寄存器.Java虚拟机栈.Java堆.方法区.本地方法栈.运行时常量池六个部分. 1. PC寄存器 PC寄存器(又叫程序计数器,Program Counter Reg ...

随机推荐

  1. 2021-11-06:3的幂。给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 3 的幂次方需满足:存在整数 x 使得 n ==

    2021-11-06:3的幂.给定一个整数,写一个函数来判断它是否是 3 的幂次方.如果是,返回 true :否则,返回 false .整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == ...

  2. ET框架6.0分析三、网络通信

    概述 ET框架的消息机制贯彻始终,包含Entity消息(Awake,Update ...),自定义(Customer)消息,网络消息等.而ET系统的进程包含了客户端.Gate等各种类型的服务器,进程包 ...

  3. ir_ui_view: 字段 `group_display_incoterm` 不存在

    ir_ui_view: 字段 `group_display_incoterm` 不存在 这种提示是没有这个字段, IR_UI_VIEW 模型存在这个视图: 1 可以登陆数据库,查询 SELECT * ...

  4. IntelliJ IDEA 最新激活码:2023、2022及以下版本通用(亲测有效)

    分享一下 IntelliJ IDEA 2023.1 最新激活注册码,破解教程如下,可免费永久激活,亲测有效,下面是详细文档哦~ 申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络, ...

  5. [Docker] Docker之安装Nginx

    0 序言 略 1 安装步骤 Step1 下载镜像 搜素.下载镜像 https://hub.docker.com/_/nginx?tab=tags 这里选择官方镜像1.22.0版本 docker sea ...

  6. ping不通能curl通

    今天发现一个域名或ip居然在ping不通的情况下能curl通,以前的思维定式直接给整破防了啊!!! 涨见识了,具体原因和原理后续补充~

  7. Windows/Linux 下功能强大的桌面截图软件

    说到桌面截图软件,很多人首先想到的是 QQ 自带的截图,或者更高级功能更强大的 Snipaste 截图工具. 独立版本的 QQ 截图至少我目前没找到官方正式的下载链接,默认需要安装和打开 QQ 才能使 ...

  8. C# 图片转PDF,PDF增加水印文字

    好久没写博客了,今天给大家分享一个图片转PDF的相关操作,也算是一次总结吧. 首先需要准备动态库itextsharp.dll,这个dll去网上下载,都可以下载到,C#对PDF的操作都是基于这个类库来实 ...

  9. 03-面试必会-Mysql篇

    1. Mysql 查询语句的书写顺序 Select [distinct ] <字段名称> from 表 1 [ <join 类型> join 表 2 on <join 条 ...

  10. -Xmx参数建议设置为系统内存的多少?

    在设置 -Xmx 参数时,建议将其设置为系统内存的一定比例.具体的比例需要根据应用程序的特点.系统资源的限制等各种因素进行综合考虑. 如果将 -Xmx 参数设置得过小,可能会导致 JVM 分配的堆内存 ...