JVM 参数配置

1. JVM参数详解

-verbose:gc
-XX:+PrintGCDetails 打印GC日志信息

-Xms20M 设置堆内存最小值, 默认为物理内存1/64,等价于-XX:InitialHeapSize
-Xmx20M 设置对内存最大值, 默认为物理内存1/4,等价于-XX:MaxHeapSize
-Xmn10M 设置新生代内存大小,
-Xss1024K 设置单个线程栈的大小,一般默认为1024K,等价于-XX:ThreadStackSize
-XX:SurvivorRatio=8 设置Eden区和S0/S1的空间比例大小。(默认 Eden:S0:S1=8:1:1)
-XX:NewRatio=2 设置新生代与老年代在堆内存结构的占比。
默认:-XX:NewRatio=2 新生代占1,老年代占2,新生代占整个堆的1/3.
假设:-XX:NewRatio=4 新生代占1,老年代占4,新生代占整个堆的1/5.

元空间参数设置
默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小:
-XX:MetaspaceSize 初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
例:-XX:MetaspaceSize=100m
-XX:MaxMetaspaceSize 最大空间,默认是没有限制的。

除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
-XX:MinMetaspaceFreeRatio 在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
-XX:MaxMetaspaceFreeRatio 在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集

-XX:MaxTenuringThreshold=15 设置的是年龄阈值,默认15(对象被复制的次数,达到最大次数后对象从新生代的Survivor区进入到老年代)

2. JVM参数应用

示例代码

/**
 * 内存测试
 * 设置最小堆内存,最大堆内存,打印GC详细信息,设置初始元空间大小:-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MetaspaceSize=100m
 */
@Slf4j
public class WhileTrueTest {
    public static void main(String[] args) throws InterruptedException {
        while (true) {
            TimeUnit.SECONDS.sleep(1);
            log.info("out ---");
        }
    }
}
2.1 配置打印GC日志信息

2.1.1 默认未配置JVM运行参数

E:\IdeaProjectsStudy\spring-example>jps -l
20960 com.gumj.jvm.WhileTrueTest
11224
16888 sun.tools.jps.Jps
20856 org.jetbrains.jps.cmdline.Launcher
11452 org.jetbrains.idea.maven.server.RemoteMavenServer
20652 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
5420

#查看是否开启PrintGCDetails参数
E:\IdeaProjectsStudy\spring-example>jinfo -flag PrintGCDetails 20960
-XX:-PrintGCDetails

2.1.2 配置JVM运行参数:-XX:+PrintGCDetails


-XX:+PrintGCDetails

2.1.3 查看已配置GC日志打印信息

E:\IdeaProjectsStudy\spring-example>jps -l
19316 sun.tools.jps.Jps
21060 org.jetbrains.jps.cmdline.Launcher
21108 com.gumj.jvm.WhileTrueTest
11224
11452 org.jetbrains.idea.maven.server.RemoteMavenServer
20652 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
5420

E:\IdeaProjectsStudy\spring-example>jinfo -flag PrintGCDetails 21108
-XX:+PrintGCDetails

配置JVM参数后通过命令jinfo -flag PrintGCDetails 21108 可以看到已经开启了GC日志信息打印
已配置:-XX:+PrintGCDetails
未配置:-XX:-PrintGCDetails

2.2 配置初始元空间大小

2.2.1 查看默认初始元空间大小

E:\IdeaProjectsStudy\spring-example>jinfo -flag MetaspaceSize 21108
-XX:MetaspaceSize=21807104

-XX:MetaspaceSize=21807104 的单位为byte, 换算后约20M

2.2.2 修改初始元空间大小为100M


-XX:MetaspaceSize=100m

2.2.3 查看修改后的初始元空间大小

E:\IdeaProjectsStudy\spring-example>jps -l
19652 sun.tools.jps.Jps
11224
21160 org.jetbrains.jps.cmdline.Launcher
11452 org.jetbrains.idea.maven.server.RemoteMavenServer
20252 com.gumj.jvm.WhileTrueTest
20652 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
5420

E:\IdeaProjectsStudy\spring-example>jinfo -flag MetaspaceSize 20252
-XX:MetaspaceSize=104857600
2.3 查看JVM所有参数配置
E:\IdeaProjectsStudy\spring-example>jinfo -flags 9280
Attaching to process ID 9280, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.112-b15
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=3145728 -XX:Min
HeapDeltaBytes=524288 -XX:NewSize=3145728 -XX:OldSize=7340032 -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompre
ssedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -Xms10m -Xmx10m -XX:+PrintGCDetails -javaagent:D:\devtools\ideaIU-2019.2.2.win\lib\idea_rt.jar=54259:D:\devtools\
ideaIU-2019.2.2.win\bin -Dfile.encoding=UTF-8
2.4查看JVM参数默认值
  • java -XX:+PrintFlagsInitial 该命令可以查看JVM所有参数的默认初始值
E:\IdeaProjectsStudy\spring-example>java -XX:+PrintFlagsInitial
[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}

  • java -XX:+PrintFlagsFinal -version 该命令可以查看JVM所有参数(默认及修改更新后)的值
E:\IdeaProjectsStudy\spring-example>java -XX:+PrintFlagsFinal -version
[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}
     bool AdjustConcurrency                         = false                               {product}

在linux中可以使用命令java -XX:+PrintFlagsFinal -version | grep ":"查看那些已经被用户或者JVM设置过的详细的XX参数的名称和值

$ java -XX:+PrintFlagsFinal -version | grep ":"
uintx InitialHeapSize                     := 57505088         {product}
uintx MaxHeapSize                         := 920649728        {product}
uintx ParallelGCThreads                   := 4                {product}
 bool PrintFlagsFinal                     := true             {product}
 bool UseParallelGC                       := true             {product}
  • java -XX:+PrintCommandLineFlags -version 该命令可以查看JVM常用参数值(可查看使用了那种GC收集器)
E:\IdeaProjectsStudy\spring-example>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=266178880 -XX:MaxHeapSize=4258862080 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseComp
ressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • 一.堆大小设置 JVM 中最大堆大小有三方面限制: 相关操作系统的数据模型(32-bt还是64-bit)限制; 系...
    宇晨棒棒的阅读 385评论 0 0
  • 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用...
    _情绪疯子阅读 1,141评论 0 0
  • JVM提供了诸多的参数进行JVM各个方面内存大小的设置,为Java应用进行优化提供了诸多的工具,本文将会详细分析各...
    s_j_x阅读 367评论 0 0
  • Java 虚拟机有自己完善的硬件架构, 如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 屏蔽了与具体操作系...
    尹小凯阅读 1,678评论 0 10
  • 文/剪甯 目 录 | 【历史仙侠】《仙旅三国之魔神董卓》简介&目录 下一章 | 【历史仙侠】仙旅三国之魔神董卓...
    剪甯阅读 1,441评论 2 50