秒懂JVM的三大参数类型,就靠这十个小实验了

秒懂JVM的三大参数类型,就靠这十个小实验了

作者:悟空哥 2020-09-24 10:18:29

云计算

虚拟化 本实验的目的是讲解 JVM 的三大参数类型。在JVM调优中用到的最多的 XX 参数,而如何去查看和设置 JVM 的 XX 参数也是调优的基本功,本节以实验的方式讲解 JVM 参数的查看和设置。希望大家能有所启发。

[[343690]]

作者 | 悟空哥

来源 | 悟空聊架构(ID:PassJava666)

本实验的目的是讲解 JVM 的三大参数类型。在JVM调优中用到的最多的 XX 参数,而如何去查看和设置 JVM 的 XX 参数也是调优的基本功,本节以实验的方式讲解 JVM 参数的查看和设置。希望大家能有所启发。

 

标配参数

常见标配参数

  • -version,获取JDK版本
  • -help,获取帮助
  • -showverision,获取JDK版本和帮助

动手实验 1 – 查看标配参数

实验步骤:

查看Java JDK 版本

  1. java -version 

实验 1-1

 

可以看到Java JDK 版本为1.8.0_131

  • 查看 Java 帮助文档
  1. java -help 

实验 1-2

 

  • 查看版本和帮助文档
  1. java -showversion 

实验 1-3

 

X 参数

X 参数简介

我们常用的javac大家都知道是把java代码编译成 class 文 Java 文件,那么 class 文件怎么去执行呢?这里用到了三个X参数来说明 class 文件怎么在虚拟机里面跑起来的。

  • -Xint:直接解释执行
  • -Xcomp:先编译成本地代码再执行
  • -XMixed:混合模式(既有编译执行也有解释执行)

动手实验 2 – 查看和配置X参数

查看版本

  1. java -version 

在WebIDE的控制台窗口执行Java -version 后,可以看到我的环境是混合模式执行java程序的。

实验 2-1

 

  • 修改编译模式为解释执行模式
  1. java -Xint -version 

在WebIDE的控制台窗口执行命令

实验 2-2

 

  • 修改编译模式为只编译模式
  1. java -Xcomp -version 

实验 2-3

 

XX 参数

XX 参数简介

XX 参数有两种类型,一种是 Boolean 类型,另外一种是键值对类型。

  • Boolean 类型
    • 公式:-XX:+某个属性 或者,-XX:-某个属性 +表示开启了这个属性,-表示关闭了这个属性。
    • 案例:-XX:-PrintGCDetails,表示关闭了GC详情输出
  • key-value类型
    • 公式:-XX:属性key=属性value
    • 案例:-XX:属性metaspace=2000000,设置Java元空间的值为2000000。

动手实验 3 – 查看参数是否开启

本实验主要讲解如下内容:查看运行的 Java 程序 PrintGCDetails 参数是否开启

  • 编写一个一直运行的 Java 程序
  • 查看该应用程序的进程 id
  • 查看该进程的 GCDetail 参数是否开启

在 WebIDE 上右键单击菜单,选择 New File 创建新文件

New File

 

创建文件名为 demoXXparam.java

demoXXparam.java

 

在 WebIDE 上编写 demoXXparam.java

  1. public class demoXXparam { 
  2.     public static void main(String[] args) throws InterruptedException { 
  3.         System.out.println("hello XX params"); 
  4.         Thread.sleep(Integer.MAX_VALUE); 
  5.     } 

在 WebIDE 的控制台窗口编译 demoXXparam.java 代码

  1. javac demoXXparam.java  

编译代码

 

编译之后,会在当前文件夹产生我们所编写的 demoXXparam 类的 demoXXparam.class 字节码文件

生产Class文件

 

在 WebIDE 上运行 demoXXparam 代码

  1. java demoXXparam 

运行Java程序

 

输出:

  1. hello XX params 

在 WebIDE 中新开一个控制台窗口

Terminal->New Terminal

开启新控制台窗口

 

查看所有的运行的java程序,-l 表示打印出class文件的包名

  1. jps -l 

jps

 

发现demoXXparam进程的id为 518

查看 demoXXparam 程序是否开启了PrintGCDetails这个参数

PrintGCDetails: 在发生垃圾回收时打印内存回收日志,并在进程退出时输出当前内存各区域分配情况

  1. jinfo -flag PrintGCDetails 518 

jinfo

 

结果如下:

  1. -XX:-PrintGCDetails 

上面提到 -号表示关闭,所以当前 demo 程序没有开启 PrintGCDetails参数。

动手实验 4 – 开启参数

  • 在 WebIDE 控制台强制退出demoXXparam程序
  1. ctrl + c 
  • 然后清理屏幕
  1. clear 
  • 然后以参数 -XX:+PrintGCDetails 运行 demoXXparam 程序
  1. java -XX:+PrintGCDetails demoXXparam 

实验 4

 

  • 输出:
  1. hello XX params 

查看demoXXparam进程的 id

进程 id

 

可以看到demoXXparam进程 id 为 1225

查看 demoXXparam 的配置参数 PrintGCDetails

打开一个新的控制台窗口,执行以下命令来查看进程为 1225 的 PrintGCDetails参数是否开启

  1. jinfo -flag PrintGCDetails 1225 

PrintGCDetails 参数

 

可以看到PrintGCDetails是开启的,+号表示开启。

动手实验 5 – Key-Value 类型参数值

查看元空间的值

  1. jinfo -flag MetaspaceSize 526 

MetaspaceSize 大小

 

由此可以得出元空间的大小为 21 M。

设置元空间的值为 128 M

  1. java -XX:MetaspaceSize=128m demoXXparam    

查看元空间的大小

  1. jinfo -flag MetaspaceSize 1062 

调整元空间大小

 

最常见的 -Xms 和 -Xmx 属于哪种参数?

  • -Xms参数代表-XX:InitialHeapSize ,初始化堆内存(默认只会用最大物理内存的64分1)
  • -Xmx:参数代表-XX:MaxHeapSize ,大堆内存(默认只会用最大物理内存的4分1)

起了别名,但还是属于XX参数。

动手实验 6 – 设置 -XX:InitialHeapSize 和 -XX:MaxHeapSize 的值。

  1. java -XX:InitialHeapSize=200m demoXXparam 
  2. 或者 
  3. java -Xms200m demoXXparam 

查看 InitialHeapSize 参数的值,大小为 200 M。

设置 InitialHeapSize

  1. java -XX:MaxHeapSize=200M demoXXparam 
  2. 或者 
  3. java -Xmx200m demoXXparam 

查看 MaxHeapSize 参数的值,大小为 200 M。

 

设置 MaxHeapSize

 

 

扩展:查看 Java 程序已设置的所有参数值

  1. jinfo -flags <进程id> 

 

mark

 

 

  • Non-Defalut VM flags 代表参数类型是JVM自带的参数。
  • Command line 代表是用户自定义的参数

如何查看出厂设置和自定义设置的XX配置项动手实验

7 – 查看出厂默认设置的所有XX配置项

  1. java -XX:+PrintFlagsInitial -version  

 

 

PrintFlagsInitial

 

 

动手实验 8 – 查看 JVM 当前所有XX配置项

  1. java -XX:+PrintFlagsFinal -version 

 

 

PrintFlagsFinal

 

 

我们可以看到几个关键信息:

  • [Global flags]:全局参数,如果自定义修改了某个应用的参数,并不会修改全局参数

比如之前我们修改了MetaspaceSize为128m,但列表里面还是21m。

 

 

Global flags

 

 

  • :=:参数已被修改,如下图所示InitialHeapSize初始化堆内存参数已修改为264241152

总结如下:

 

 

出厂设置和自定义参数设置

 

 

动手实验 9 – 运行程序时打印XX配置选项

  1. java -XX:+PrintFlagsFinal -XX:+InitialHeapSize=150M demoXXparam 

可以看到修改后的值为 157286400(150 M)

运行程序时打印XX配置选项

 

动手实验 10 – 查看 JVM 自动配置的或者用户手动设置的XX选项(非应用程序的)

  1. java -XX:+PrintCommandLineFlags -version 

会打印出如下参数:

 

JVM 自动配置的XX选项

 

 

实验总结

本节实验课学习了如何查看基本参数、X参数、XX参数和设置XX参数。以及用好jps和jinfo工具来查看进程和设置参数。

JVM性能调优还有很多要讲的,一篇是讲不完的,我会分成几篇来为大家讲述,形式主要以小实验的方式来为大家讲解。

本文转载自微信公众号「 悟空聊架构」,可以通过以下二维码关注。转载本文请联系 悟空聊架构公众号。

 

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/237824.html<

(0)
运维的头像运维
上一篇2025-04-22 15:59
下一篇 2025-04-22 16:00

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注