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

标配参数

常见标配参数

  • -version,获取JDK版本

  • -help,获取帮助

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

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

实验步骤:

  • 查看Java JDK 版本
java -version

实验 1-1

可以看到Java JDK 版本为1.8.0_131

  • 查看 Java 帮助文档
java -help

实验 1-2
  • 查看版本和帮助文档
java -showversion

实验 1-3

X 参数

X 参数简介

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

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

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

  • 查看版本
java -version

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

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

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

实验 2-2
  • 修改编译模式为只编译模式
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

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

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

javac demoXXparam.java 

编译代码

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

生产Class文件

在 WebIDE 上运行 demoXXparam 代码

java demoXXparam

运行Java程序

输出:

hello XX params

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

Terminal->New Terminal

开启新控制台窗口

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

jps -l

jps

发现demoXXparam进程的id为 518

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

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

jinfo -flag PrintGCDetails 518

jinfo

结果如下:

-XX:-PrintGCDetails

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

动手实验 4  - 开启参数

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

实验 4
  • 输出:
hello XX params

查看demoXXparam进程的 id

进程 id

可以看到demoXXparam进程 id 为 1225

查看 demoXXparam 的配置参数 PrintGCDetails

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

jinfo -flag PrintGCDetails 1225

PrintGCDetails 参数

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

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

查看元空间的值

jinfo -flag MetaspaceSize 526

MetaspaceSize 大小

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

设置元空间的值为 128 M

java -XX:MetaspaceSize=128m demoXXparam   

查看元空间的大小

    jinfo -flag MetaspaceSize 1062

调整元空间大小

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

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

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

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

java -XX:InitialHeapSize=200m demoXXparam或者java -Xms200m demoXXparam

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

设置 InitialHeapSize
java -XX:MaxHeapSize=200M demoXXparam或者java -Xmx200m demoXXparam

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

设置 MaxHeapSize

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

jinfo -flags 

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

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

动手实验 7 - 查看出厂默认设置的所有XX配置项

java -XX:+PrintFlagsInitial -version 

PrintFlagsInitial

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

java -XX:+PrintFlagsFinal -version 

PrintFlagsFinal

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

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

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

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

    总结如下:

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

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

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

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

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

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

java -XX:+PrintCommandLineFlags -version

会打印出如下参数:

JVM 自动配置的XX选项

实验总结

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

JVM性能调优还有很多要讲的,一篇是讲不完的,后面有机会继续用实验的形式来分享。

往期资源  需要请自取

Java基础核心知识大总结.pdf 下载

68道C语言/C++常见面试题(含答案)下载

Java后端开发学习路线+知识点总结

前端开发学习路线+知识点总结

C/C++开发(后台)学习路线+知识点总结

嵌入式开发学习路线+知识点总结

每天进步一点点

慢一点才能更快

下篇见。

如何开启jvm日志_做了10个小实验:搞懂了JVM三大参数类型相关推荐

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

    来源 | 悟空聊架构(ID:PassJava666) 本实验的目的是讲解 JVM 的三大参数类型.在JVM调优中用到的最多的 XX 参数,而如何去查看和设置 JVM 的 XX 参数也是调优的基本功,本 ...

  2. 不要做一个「永远没彻底搞懂」诸如递归等概念的程序员

    Don't be the person who "never quite understood" something like recursion. https://teachyo ...

  3. linux 查看jvm虚拟内存_看完你还敢说你懂JVM吗?

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m.从表面上,物理内存应该 ...

  4. QQ伤感日志_你教会了我爱,让我懂得了爱

    QQ伤感日志_你教会了我爱,让我懂得了爱 - QQ伤感日志_你教会了我爱,让我懂得了爱 一个人的夜,关上灯,不想睡.回味当初你给你完美. 我付出了真心,我付出了全部,我愿意用我的生命啦呵护你,好好的爱 ...

  5. python财务预算分析_财码Python管理会计小实验—营运管理之多维度盈利能力分析...

    在上篇财码Python管理会计小实验中,我们学习了预算管理中的滚动预算vs定期预算,本篇我们继续学习营运管理中的多维度盈利能力分析. 知识点回顾 多维度盈利能力分析:是指企业对一定期间内的经营成果,按 ...

  6. javase开发工具包中的什么命令负责运行应用程序_想当程序员?先搞懂JavaSE、JavaEE和JavaME之间的区别吧!...

    Java是一门比较灵活的编程语言,且目前行业90%的应用软件服务器端都采用Java语言进行开发,而Java编程的相关技术人才始终是各领域技术型岗位不可或缺的. 作为0基础或者想转行当程序员最好还是先搞 ...

  7. python复利终值_财码Python管理会计小实验—投融资管理之货币时间价值

    今天我们继续学习财码Python管理会计小实验之投融资管理篇,本章重点聊聊货币时间价值,望开卷有益. 知识点回顾 >>>货币的时间价值的含义 货币时间价值:指在不考虑风险和通货膨胀的 ...

  8. python财务预算分析_财码Python管理会计小实验—弹性预算vs固定预算

    知识点回顾-预算管理 预算管理,是指企业以战略目标为导向,通过对未来一定期间内的经营活动和相应的财务结果进行全面预测和筹划,科学.合理配置企业各项财务和非财务资源,并对执行过程进行监督和分析,对执行结 ...

  9. 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...

    JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势.及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM ...

最新文章

  1. 解析C语言中的sizeof
  2. jQuery实现表格拖动排序
  3. 迪士尼又出黑科技,可将自然语言脚本转化为VR视频
  4. webpack——解决当前 Web 开发面临的困境||webpack 概述
  5. ajax提交数据服务端返回报错
  6. python 2022/1/2
  7. ACM在线测评系统评测程序设计与python实现
  8. c++ 函数模板_C/C++编程笔记:C++入门知识,深入解析C++函数和函数模板
  9. iOS-raywenderlich翻译-AFNetworking速成教程
  10. 再次参加(第七届)商学院徒步戈壁挑战赛,赋词几首
  11. vue的模糊查询和下拉菜单修改信息------------学习记录
  12. python之log日志模块
  13. 开源实战 | 手把手教你在 Azure 上畅享 SAP、SUSE全套解决方案
  14. 热门好用的空号检测API推荐
  15. ApacheCN 活动汇总 2019.8.16
  16. 运放专题:运放参数之压摆率
  17. 台式计算机如何上无线网络,台式电脑如何实现无线上网
  18. 1006 换个格式输出整数
  19. 洛谷P1510-精卫填海(01背包)
  20. Oracle EBS财务模块(一)基本功能

热门文章

  1. ASP.NET Core 1.0中的管道-中间件模式
  2. rest_framework04:ModelSerializer/Serializer高级用法
  3. 回车ajax显示,ajax返回值中有回车换行、空格的解决方法分享
  4. java excutorthread_Java中ThreadPoolExecutor的参数理解
  5. [转]一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
  6. IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)
  7. C和指针之部分理解和编码总结
  8. Eclipse之如何快速查看抽象函数实现
  9. Android之获取应用程序(包)的大小-----PackageManager的使用(二)
  10. 按一行一行的方法将一个文本文件复制到另一个文件中_命令行技巧:分割文件内容...