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左右应用,如果栈不是很深,
应该是128k够用的大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。

-XX:ThreadStackSize

Thread  Stack Size



-XX:NewRatio

年轻代与年老代的比值(不含持久代)


-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5

 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。

-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



试图是使用大量的物理内存

长时间大内存使用的优化,能检查计算资源(内存, 处理器数量)至少需要256MB内存大量的CPU/内存,

-XX:CMSFullGCsBeforeCompaction

多少次后进行内存压缩


由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理.

-XX:+CMSParallelRemarkEnabled

降低标记停顿



-XX+UseCMSCompactAtFullCollection

在FULL GC的时候, 对年老代的压缩


CMS是不会移动内存的, 因此,这个非常容易产生碎片导致内存不够用,因此,内存的压缩这个时候就会被启用。增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片

-XX:+UseCMSInitiatingOccupancyOnly

使用手动定义初始化定义开始CMS收集


禁止hostspot自行触发CMS GC

-XX:CMSInitiatingOccupancyFraction=70

使用cms作为垃圾回收

使用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的参数说明的更多相关文章

  1. jdk8 jvm配置参数说明

    这些选项是特定于Java HotSpot虚拟机的通用选项.-X 显示所有可用-X选项的帮助. -Xbatch 禁用后台编译.默认情况下,JVM将该方法编译为后台任务,以解释器模式运行该方法,直到后台编 ...

  2. JVM常用参数说明

    内存相关 通过这些参数可以对JVM的内存分配做调整 Xms 英文解释:Initial heap size(in bytes) 中文释义:堆区初始值 使用方法:-Xms2g 或 -XX:InitialH ...

  3. 关于jvm的OutOfMemory:PermGen space异常的解决

    在做网校的时候,经常会在控制台会报出方法区的内存溢出,在网上找的方法,无非都是在tomcat的bin/catalina.bat文件中 设置jvm的堆的大小和方法区的大小,但是通过eclipse启动to ...

  4. Tomcat配置JVM运存

    setenv.bat set "JAVA_OPTS=-server -Xms256M -Xmx1024M -XX:PermSize=256m -XX:MaxPermSize=1024m&qu ...

  5. 深入理解JVM - JVM内存模型

    各版本的差异 JDK1.6 在JDK1.6 的时候运行时常量池在方法区中 JDK1.7 在JDK1.7 的时候运行时常量池在堆中 JDK1.8 在JDK1.8 的时候,JVM内存模型直接将方法区移到了 ...

  6. 《深入Java虚拟机学习笔记》- 第9章 垃圾收集

    一.Java内存组成 组成图 堆(Heap) 运行时数据区域,所有类实例和数组的内存均从此处分配.Java虚拟机启动时创建.对象的堆内存由称为垃圾回收器的自动内存管理系统回收. 组成 组成 详解 Yo ...

  7. 27、Tomcat服务的安装与配置

    服务器名称 ip地址 slave-node1 172.16.1.91 27.1. Tomcat简介: Tomcat是Apache软件基金会(Apache Software Foundation)的Ja ...

  8. JVM参数说明介绍

    1.JVM运行时数据区内存参数说明 2.JVM垃圾收集器参数总结 原文:https://blog.csdn.net/bluuusea/article/details/90697340 ======== ...

  9. JVM参数说明

    转载于https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html文章 JVM参数说明 -Xms:初始堆大小  默认值=物理内存的1 ...

  10. JVM参数说明(转)

    做了这么多年java,自以为算是熟悉,其实还差得远,啥也别说了,还是踏踏实实地学吧.今天总结一下常用的JVM的启动参数. 参数类别 参数项 说明 标准参数(-,所有的JVM实现都必须实现这些参数的功能 ...

随机推荐

  1. 探索一下 Enum 优化

    探索一下 Enum 优化 SV.Enums主要是探索如何让 enum 更高效 其中涉及的优化手段并非完全自创 很多内容参考于以下项目 NetEscapades.EnumGenerators FastE ...

  2. 【图文教程】Centos 7下安装Hadoop

    环境说明: 系统:Centos7 在VM中安装的 hadoop版本:2.7.7 JDK:1.8 注意:Hadoop需要Java环境的.记得安装Java环境 PS:Centos JDK安装  mkdir ...

  3. python requests 报错 Caused by ProxyError ('Unable to connect to proxy', OSError('Tunnel connection failed: 403 Tunnel or SSL Forbidden'))

    背景:访问https接口,使用http代理 版本:requests: 2.31.0 从报错可以看出,是proxy相关的报错 调整代码,设定不使用代理,将http与https对应的proxy值置空即可( ...

  4. Serilog文档翻译系列(四) - 结构化数据

    Serilog 是一种序列化器.在许多情况下,它具有良好的默认行为,能够满足其目的,但有时也需要指示 Serilog 如何存储附加到日志事件上的属性. Serilog 使用一些不寻常的术语来指代 .N ...

  5. 云上分布式SQL Server,你值得拥有

    云上分布式SQL Server,你值得拥有 介绍Microsoft SQL Azure 是微软的云关系型数据库,后端存储又称为云 SQL Server(Cloud SQL Server).它构建在 S ...

  6. 关于 JS 函数的一切

    本文基于: Bilibili - 自由的加百利 前置条件: 需掌握函数的编写.传参.返回.调用 理解作用域.掌握定时器的用法 知道引用类型和基本数据类型的区别 知道函数也是引用类型 听说过同步异步的概 ...

  7. Windows应急响应-Auto病毒

    目录 应急背景 分析样本 开启监控 感染病毒 查看监控 分析病毒行为 autorun.inf分析 2.异常连接 3.进程排查 4.启动项排查 查杀 1.先删掉autorun.inf文件 2.使用xue ...

  8. 从SQL Server过渡到PostgreSQL:理解模式的差异

    从SQL Server过渡到PostgreSQL:理解模式的差异 前言 随着越来越多的企业转向开源技术,商业数据库管理员和开发者也逐渐面临向PostgreSQL迁移的需求. 虽然SQL Server和 ...

  9. bpftool使用方法简介

    1.安装bpftool工具 看起来,在不同的linux发行版里,bpftool在不同的软件包里,ubuntu 22上,bpftool是linux-tools-generic的一部分,而树莓派里bpft ...

  10. PRT预计算辐射传输方法

    PRT(Precomputed Radiance Transfer)技术是一种用于实时渲染全局光照的方法.它通过预计算光照传输来节省时间,并能够实时重现面积光源下3D模型的全局光照效果. 由于PRT方 ...