JVM的参数说明
Java虚拟机的参数说明
Java运行时数据区域:
线程共享区:方法区(永久区),堆
线程私有区:虚拟机栈,本地方法栈,程序计数器
JAVA_OPTS="-server -Duser.timezone=GMT+08
-Xms1024m -Xmx1024m -XX:PermSize=1024m -Xmn512m
-XX:MaxPermSize=1024m
-Djava.awt.headless=true"
堆内存分配
JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;
JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。
默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;
空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
jvm参数说明:
-server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:java Heap初始大小。默认是物理内存的1/64。
-Xmx:java heap最大值。建议均设为物理内存的一半。不可超过物理内存。
-XX:PermSize:设定内存的永久保存区(即方法区)初始大小,缺省值为64M。-XX:MaxPermSize:设定内存的永久保存区最大大小,缺省值为64M。-XX:SurvivorRatio=2:生还者池的大小,默认是2,如果垃圾回收变成了瓶颈,您可以尝试定制生成池设置
-XX:NewSize:新生成的池的初始大小。缺省值为2M。
-XX:MaxNewSize:新生成的池的最大大小。缺省值为32M。
-Xss:每个线程的Stack大小,而最佳值应该是128K,默认值是512k.
-verbose:gc 显示垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young
generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间此选项在Heap Size
-XX:userParNewGC可用来设置并行收集【多CPU】
-XX:ParallelGCThreads 可用来增加并行度【多CPU】
-XX:UseParallelGC 设置后可以使用并行清除收集器【多CPU】
方法区在物理上存在堆里,且是在堆的持久代里面;但在逻辑上方法区和堆是独立的。
Java整个堆真正大小=年轻代大小 + 年老代大小 + 持久代大小
一般分配堆的大小都是由年轻代大小 + 老年代大小构成的
参数名称 |
含义 |
默认值 |
|
-Xms |
初始堆大小 |
物理内存的1/64(<1GB) |
空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. |
-Xmx |
最大堆大小 |
物理内存的1/4(<1GB) |
空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 |
-Xmn |
年轻代大小 |
|
增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 |
-XX:NewSize |
设置年轻代大小 |
|
|
-XX:MaxNewSize |
年轻代最大值 |
|
|
-XX:PermSize |
设置持久代初始值 |
物理内存的1/64 |
|
-XX:MaxPermSize |
设置持久代最大值 |
物理内存的1/4 |
|
-Xss |
每个线程的堆栈大小 |
|
JDK5.0以后每个线程堆栈大小为1M.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统是有限制的,不能无限生成,经验值在3000~5000左右应用,如果栈不是很深, |
-XX:ThreadStackSize |
Thread Stack Size |
|
|
-XX:NewRatio |
年轻代与年老代的比值(不含持久代) |
|
-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 |
-XX:SurvivorRatio |
Eden区与一个Survivor区的大小比值 |
|
设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 |
-XX:LargePageSizeInBytes |
内存页的大小不可设置过大, 会影响Perm的大小 |
|
=128m |
-XX:+UseFastAccessorMethods |
原始类型的快速优化 |
|
|
-XX:+DisableExplicitGC |
关闭System.gc() |
|
这个参数需要严格的测试 |
-XX:MaxTenuringThreshold |
垃圾最大年龄,对象晋升为老年代的阀值 |
|
如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活 时间,增加在年轻代即被回收的概率。 |
-XX:+AggressiveOpts |
加快编译 |
|
|
-XX:+UseBiasedLocking |
锁机制的性能改善 |
|
|
-Xnoclassgc |
禁用垃圾回收 |
|
|
-XX:SoftRefLRUPolicyMSPerMB |
每兆堆空闲空间中SoftReference的存活时间 |
1s |
|
-XX:PretenureSizeThreshold |
对象超过多大是直接在老年代中分配 |
0 |
|
-XX:TLABWasteTargetPercent |
TLAB占eden区的百分比 |
1% |
|
-XX:+CollectGen0First |
FullGC时是否先YGC |
false |
|
并行收集器相关参数
-XX:+UseParallelGC |
Full GC采用parallel MSC |
|
虚拟机在Server状态下,使用Parallel Scavenge+Serial Old |
-XX:+UseParNewGC |
设置年轻代为并行收集 |
|
ParNew+Serial Old收集器 |
-XX:ParallelGCThreads |
并行收集器的线程数 |
|
此值最好配置与处理器数目相等 同样适用于CMS |
-XX:+UseParallelOldGC |
年老代垃圾收集方式为并行收集(Parallel Compacting) |
|
使用 ParallelScavenge+Parallel Old 收集器 |
-XX:MaxGCPauseMillis |
每次年轻代垃圾回收的最长时间(最大暂停时间) |
|
如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值. |
-XX:+UseAdaptiveSizePolicy |
自动选择年轻代区大小和相应的Survivor区比例 |
|
设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开. |
-XX:GCTimeRatio |
设置垃圾回收时间占程序运行时间的百分比 |
|
公式为1/(1+n) |
-XX:+ScavengeBeforeFullGC |
Full GC前调用YGC |
true |
|
CMS相关参数
-XX:+UseConcMarkSweepGC |
使用CMS内存收集 |
|
使用ParNew+CMS+Serial Old的收集器组合进行内存回收。 |
-XX:+AggressiveHeap |
|
|
试图是使用大量的物理内存 |
-XX:CMSFullGCsBeforeCompaction |
多少次后进行内存压缩 |
|
由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理. |
-XX:+CMSParallelRemarkEnabled |
降低标记停顿 |
|
|
-XX+UseCMSCompactAtFullCollection |
在FULL GC的时候, 对年老代的压缩 |
|
CMS是不会移动内存的, 因此,这个非常容易产生碎片导致内存不够用,因此,内存的压缩这个时候就会被启用。增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片 |
-XX:+UseCMSInitiatingOccupancyOnly |
使用手动定义初始化定义开始CMS收集 |
|
禁止hostspot自行触发CMS GC |
-XX:CMSInitiatingOccupancyFraction=70 |
使用cms作为垃圾回收 |
92 |
|
-XX:CMSInitiatingPermOccupancyFraction |
设置Perm Gen使用到达多少比率时触发 |
92 |
|
-XX:+CMSIncrementalMode |
设置为增量模式 |
|
用于单CPU情况 |
-XX:+CMSClassUnloadingEnabled |
|
|
|
辅助信息
-XX:+PrintGC |
|
|
|
-XX:+PrintGCDetails |
|
|
|
-XX:+PrintGCTimeStamps |
|
|
|
-XX:+PrintGC:PrintGCTimeStamps |
|
|
可与-XX:+PrintGC -XX:+PrintGCDetails混合使用 |
-XX:+PrintGCApplicationStoppedTime |
打印垃圾回收期间程序暂停的时间.可与上面混合使用 |
|
|
-XX:+PrintGCApplicationConcurrentTime |
打印每次垃圾回收前,程序未中断的执行时间.可与上面混合使用 |
|
|
-XX:+PrintHeapAtGC |
打印GC前后的详细堆栈信息 |
|
|
-Xloggc:filename |
把相关日志信息记录到文件以便分析. |
|
|
-XX:+PrintClassHistogram |
garbage collects before printing the histogram. |
|
|
-XX:+PrintTLAB |
查看TLAB空间的使用情况 |
|
|
XX:+PrintTenuringDistribution |
查看每次minor GC后新的存活周期的阈值 |
|
|
JVM的参数说明的更多相关文章
- jdk8 jvm配置参数说明
这些选项是特定于Java HotSpot虚拟机的通用选项.-X 显示所有可用-X选项的帮助. -Xbatch 禁用后台编译.默认情况下,JVM将该方法编译为后台任务,以解释器模式运行该方法,直到后台编 ...
- JVM常用参数说明
内存相关 通过这些参数可以对JVM的内存分配做调整 Xms 英文解释:Initial heap size(in bytes) 中文释义:堆区初始值 使用方法:-Xms2g 或 -XX:InitialH ...
- 关于jvm的OutOfMemory:PermGen space异常的解决
在做网校的时候,经常会在控制台会报出方法区的内存溢出,在网上找的方法,无非都是在tomcat的bin/catalina.bat文件中 设置jvm的堆的大小和方法区的大小,但是通过eclipse启动to ...
- Tomcat配置JVM运存
setenv.bat set "JAVA_OPTS=-server -Xms256M -Xmx1024M -XX:PermSize=256m -XX:MaxPermSize=1024m&qu ...
- 深入理解JVM - JVM内存模型
各版本的差异 JDK1.6 在JDK1.6 的时候运行时常量池在方法区中 JDK1.7 在JDK1.7 的时候运行时常量池在堆中 JDK1.8 在JDK1.8 的时候,JVM内存模型直接将方法区移到了 ...
- 《深入Java虚拟机学习笔记》- 第9章 垃圾收集
一.Java内存组成 组成图 堆(Heap) 运行时数据区域,所有类实例和数组的内存均从此处分配.Java虚拟机启动时创建.对象的堆内存由称为垃圾回收器的自动内存管理系统回收. 组成 组成 详解 Yo ...
- 27、Tomcat服务的安装与配置
服务器名称 ip地址 slave-node1 172.16.1.91 27.1. Tomcat简介: Tomcat是Apache软件基金会(Apache Software Foundation)的Ja ...
- JVM参数说明介绍
1.JVM运行时数据区内存参数说明 2.JVM垃圾收集器参数总结 原文:https://blog.csdn.net/bluuusea/article/details/90697340 ======== ...
- JVM参数说明
转载于https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html文章 JVM参数说明 -Xms:初始堆大小 默认值=物理内存的1 ...
- JVM参数说明(转)
做了这么多年java,自以为算是熟悉,其实还差得远,啥也别说了,还是踏踏实实地学吧.今天总结一下常用的JVM的启动参数. 参数类别 参数项 说明 标准参数(-,所有的JVM实现都必须实现这些参数的功能 ...
随机推荐
- Java 1.8 Stream流原理与用法总结
一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心 ...
- 一文看懂global, nonlocal, local变量
Python中,变量是根据程序运行顺序进行的,比如函数外的变量,在函数内是可见的,但是可用,不可赋值.那么如何实现赋值呢? 利用global关键字进行. 在函数内,如果出现和函数外的变量同名变量,而且 ...
- 柳婼 の PAT甲级题解
1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 102 ...
- QT原理与源码分析之如何开发一个自定义的绘图设备和QT绘图引擎?
简介 本文将介绍如何自定义QT绘图设备类和如何自定义QT绘图引擎类. 目录 QT绘图设备抽象类QPaintDevice QT绘图引擎抽象类QPaintEngine 自定义绘图设备类 自定义绘图引擎类 ...
- 精彩回顾 | Flutter Engage China 视频合集
在上周的 Flutter Engage China 活动中,Google Flutter 团队和来自国内的开发者们共同探讨和交流 Flutter 的最新更新.实践和未来的发展.虽然只能通过线上交流,但 ...
- 【赵渝强老师】Redis的RDB持久化
Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF (Append-only file) ...
- XYD1006CSPS
T1 密钥 [关键结论,模拟,枚举] Description 给定两个长度为 \(n\) 的 \(01\) 序列 \(a\),\(b\),每个位置都有一个权值 \(c\), 每次操作可以将 \(a\) ...
- 了解final关键字在Java并发编程领域的作用吗?
在Java并发编程领域,final关键字扮演着一个至关重要的角色.虽然很多同学熟悉final用于修饰变量.方法和类的基本用法,但其在并发环境中的应用和原理却常常被忽视.final关键字不仅仅是一个简单 ...
- 世界第一!华为云图引擎服务GES大幅刷新世界纪录
近日,国际关联数据基准委员会(Linked Data Benchmark Council,以下简称LDBC)公布了社交网络测试交互式负载(SNB INTERACTIVE WORKLOAD,以下简称为S ...
- 时隔半年 DotNetGuide 已突破了 6.6K + Star,持续更新,欢迎更多小伙伴PR投稿!
前言 记得今年5月份的时候 DotNetGuide GitHub才突破5k Star,经过持续不断地输出时隔半年 DotNetGuide 已突破了 6.6K + Star!并且由我创建的DotNetG ...