前言

仅列出常用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-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v的最长子数组长度。

    2021-03-31:给定一个数组arr,给定一个值v.求子数组平均值小于等于v的最长子数组长度. 福大大 答案2021-03-31: 这道题是昨天每日一题的变种.数组每个元素减v,然后求<=0 ...

  2. Selenium - 元素定位(1) - 八种元素定位

    Selenium - 元素定位 八种元素定位 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定 ...

  3. IBM小型机 - 检测码:B150B10C,设备卡住不运行

    检测码:B150B10C 问题 开机后,出现检测码:B150B10C,然后就卡在这里不动,无法进行下一步: 这里的错误码表示--机器的内存控制模块被deconfig(取消配置): 解决方法 登录cel ...

  4. Vue Element-ui 之 el-table自动滚动

    首先是 div结构布局 <div id="scrollId">//对el-table盒子设置 id 属性 <div style="height: 100 ...

  5. 蓝桥杯真题 平面切分(Set自定义去重)

    题目详情 资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 平面上有 N 条直线,其中第 i 条直线是 y=Ai⋅ ...

  6. Deferred Components-实现Flutter运行时动态下发Dart代码 | 京东云技术团队

    导读 Deferred Components,官方实现的Flutter代码动态下发的方案.本文主要介绍官方方案的实现细节,探索在国内环境下使用Deferred Components,并且实现了最小验证 ...

  7. Error: webpack.optimize.CommonsChunkPlugin has been removed

    最近使用webpack 进行react 依赖抽离时发现原本的webpack.optimize.CommonsChunkPlugin已经不能使用了 打包时提示 Error: webpack.optimi ...

  8. 1.1. Java简介与安装

    Java简介 Java是一种广泛使用的计算机编程语言,由James Gosling和他的团队在Sun Microsystems公司开发,于1995年首次发布.Java的设计理念是"一次编写, ...

  9. 7-9 《Fibonacci 数列》

    7-9 <Fibonacci 数列> 思路:吃过前面<序列求和>问题的亏 但还是要尝试一下循环大法 Fn=Fn-1+Fn-2 定义int型 aFn-1 , bFn-2 , cF ...

  10. 【Python】sqlmodel: Python 数据库管理ORM 的终极形态?

    ORM 大家都知道ORM(Object Relational Mapping)是一种将对象和关系数据库中的表进行映射的技术,它可以让开发者更加方便地操作数据库,而不用直接使用SQL语句. 直接使用SQ ...