JVM调优从0到1
Posted msi-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM调优从0到1相关的知识,希望对你有一定的参考价值。
老生常谈,面试吹牛的的最佳谈资,在接下来的几天里,我找了点资料来对其进行一波学习;
本地环境是不需要对我们的虚拟机进行优化的,一般在生产环境下,也就是Linux下才有对JVM优化的需求
JVM的运行参数
参数的类型有三种
在JVM中有很多的参数是可以设置的,这些参数我们把它分为三类
-
标准参数(比较稳定的,在未来的版本更迭中,都不会丢失的,非标准的参数不能保证)
-
-X参数(也就是非标准的 java -X 查看所有的参数)
-
-XX参数(也是非标准参数,这种类型的参数一般都是用于JVM的调优改动)
java -help:查看命令,我们可以在里面找到上面所说的三种类型的的影子
Demo:标准参数
java -version :查看jvm的版本
java -showversion :查看kvm版本信息,并执行其后的其他命令(常用)
-D:设置系统参数,相当于上下文,我们可以添加K和V进去,然后拿到K的值
首先我们去Linux上写一个测试类如下所示:
然后我们去编译并运行它:
可见是没有值的,下面我们就对“chen”这个K,设置Value,让他被获取到:
java -Dchen=HelloWorld test1:意思为设置系统属性”chen“,为其赋值为HelloWorld,然后再运行test1文件,
最后输出结果已经可以发现,系统属性设置生效
-server 和 -client 模式
server模式的话,jvm的初始化堆空间会大一些,启动慢,但是后续的运行就非常的丝滑
client模式的话,jvm初始化的堆空间就会小一点,启动非常快,但是运行相对较卡
这个都是了解部分,以为jvm在启动的时候会根据硬件和系统自动给我选择最合适的模式
现在的机器基本都是64位的系统吧,64位的系统只支持server模型,只要机器给力都是选择server模式
Demo:-X参数 [ 调优参数]
我们可以通过java -X 这个命令去获取所有-x的参数列表
-
-Xms和-Xmx参数设置堆内存的初始化大小和最大大小
-Xmx2048m:表示设置JVM的最大堆内存为2048兆
-Xms512m:表示设置JVM的初始化堆内存为512兆
-
-Xint、-Xcomp、-Xmixed,这三个参数的配置
-Xint,解释模式,会强制jvm逐行执行所有的字节码,运行速度很明显的变慢
-Xcomp,编译模式,jvm在第一次使用时会把所有的字节码编译成本地代码(会卡一下),带来最大的优化效果
-Xmixed,混合模式,将解释模式与编译模式进行混合使用,由jvm自己决定,默认使用该模式
编译模式下会卡顿一下再弹出结果,这个值得注意一下,但这也是一种优化,后面执行就会非常流畅
Demo:-XX参数 [调优参数]
上面已经说到,-XX也是非标准参数,主要用于jvm的调优和debug的操作
-XX参数的使用分为两种方式,一种boolean类型,一种非boolean类型
-
boolean类型
-XX[+/-]<name> :表示启动或者禁用某个属性,+:启动,-:禁用
如:-XX:+DisableExplicitGC:表示开启禁用手动调用gc操作,也就是说System.gc无效
-
非boolean类型
-XX:<name>=<value> :表示name的值为Value
如:-XX:NewRatio=1 :表示新生代和老年代的比值
查看当前JVM的运行参数
-
运行Java命令时打印出运行参数
-
执行:java -XX:+PrintFlagsFinal test1
-
会得到一堆信息配置的信息,大部分的信息我们都看不懂,但还是有一点需要说明
-
在我们得到的信息列表中都是KV结构的,V一般分为true/false或者为属性值这两种方式
-
k=V,这种通过=符号表示的,是使用的默认值
-
k:=V,这种方式表示已经被我们改动,是使用的我们给定的参数
-
-
查看正在运行的java进程的参数
-
启动一个tomcatu用于测试,下面我们通过jinfo命令查看所有的运行参数信息
-
jinfo -flags <进程id>:进程ID,我们可以通过ps -ef | grep tomcat 拿到,下面我们一起来看看
-
通过上面这张体,可以发现,很多参数被被打印了,虽然我们大部分都不知道他的意思,但我们仔细读读还是有那么两个我们在上面讲过的
-
如果我们只想单一的查看某个运行参数的值,我们可以通过下面这种方式获取:
-
jinfo -flag <参数名称> <进程id>,比如我们去获取最大的堆内存空间大小:
-
-
JVM的内存模型
你也可以 :回顾往日学习:jvm内存模型
以上是关于JVM调优从0到1的主要内容,如果未能解决你的问题,请参考以下文章