学习 尚硅谷 宋红康 JVM从入门到精通 的学习笔记

概述

jinfo全拼是 Configuration Info for Java
作用是查看虚拟机配置参数信息,也可以用于调整虚拟机的配置参数。
在很多情况下,Java应用程序不会指定所有的Java虚拟机参数,毕竟虚拟机参数太多了,开发人员可能不知道某个Java虚拟机的参数设置的默认值到底是多少,比如说我想看一下默认的新生代老年代比例分配是多少等等。这个时候如果开发人员去查找开发文档的话,可能就比较麻烦了,但是使用jinfo工具,开发人员就能很快的查看到某个虚拟机配置的参数。

image.png

基本语法

image.png

查看
jinfo -sysprops 进程id
可以查看由System.getProperties()取得的参数
jinfo -flags 进程id
查看曾经赋过值的一些参数
jinfo -flag 参数名称 进程id
查看某个java进程的具体参数信息

修改
image.png
image.png
针对boolean类型
jinfo -flag [+|-]参数名称 进程id
针对非boolean类型
jinfo -flag 参数名称=参数值 进程id

演示

image.png
image.png

设置完以后启动上面的main方法。下面使用命令查看一下。
image.png
用 jps -v可以看到我们自己设置的参数,但是如果我们想知道我们没有设置的参数是多少,我们使用jps -v就不太行了.


使用 jinfo -sysprops 2540就能查看一些信息。
image.png


查询赋过值的信息
image.png


查看具体赋值过的信息,查询是否使用并行垃圾回收器呢。 “+” 代表使用了
image.png

查询是否使用了串行的垃圾回收器, “- ”代表没有使用
image.png


查看最大堆空间大小
image.png


修改参数可以立即生效,但是不是所有的值都可以动态的去修改,只有被标记为manageable的flag可以被实时的修改,

下面命令是查看PrintGCDetails的值,结果是 “-”代表没有修改过
image.png

第一行命令 PrintGCDetails 前面添加 “+” , 再去执行第二行的命令,查看,就发现之前是”-“,现在变成了”+”,说明参数被修改了.
image.png

下面也是动态的修改,修改后再查看,发现修改成功了.

image.png

注意,动态修改的值仅仅临时有效,当你这个进程关闭之后,这个动态修改的参数就失效了,你下次再启动Java程序的时候,又回来原来的值了.

扩展

拓展
java -XX:+PrintFlagsInitial
查看所有JVM参数启动的初始值
java -XX:+PrintFlagsFinal
查看所有JVM参数的最终值
image.png
值前面添加冒号:的是修改之后的值,没有添加的都是没有发生改变的初始值

java -参数名称:+PrintCommandLineFlags
查看那些已经被用户或者JVM设置过的详细的XX参数的名称和值

演示

image.png
将结果输出到 1.txt 里面.

image.png