亲宝软件园·资讯

展开

[JVM教程与调优] JVM都有哪些参数类型?

Coder编程 人气:0
![JVM都有哪些参数类型?](https://upload-images.jianshu.io/upload_images/7326374-2e781e5775d008a4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) JDK本身是提供了一些监控工具,有一些是命令行,也有图形界面。本次介绍命令行如何进行监控。 命令行是非常重要的,因为在我们生产环境基本上是没有图形界面的,完全是通过命令行。 主要内容: - JVM的参数类型 - 运行时JVM参数查看 - jstat查看虚拟机统计信息 - jmap+MAT实战内存溢出 - jstack实战死循环与死锁 ## JVM参数类型 那么都有哪些JVM参数类型呢?一共分为三大类 - 标准参数 - X参数 - XX参数 ### 标准参数 1.-help 2.-server -client 3.-version -showversion 4.-cp -classpath 标准参数,在各个版本的JVM里面中,基本保持不变。相对比较稳定 例如:java -help ![标准参数 java -help](https://upload-images.jianshu.io/upload_images/7326374-26c158f6a421c847.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### X参数 - 非标准参数 也就是说在各个版本的JVM中可能会变,但是变化的也比较小。 1.-Xint:解释执行 2.-Xcomp:第一次使用就编译成本地代码 3.-Xmixed:混合模式,JVM自己来决定是否编译成本地代码 举例: ![默认混合模式](https://upload-images.jianshu.io/upload_images/7326374-c0c1fefc6d695ca7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![设置成解释模式](https://upload-images.jianshu.io/upload_images/7326374-19e33bac4baecdd9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![设置成编译模式](https://upload-images.jianshu.io/upload_images/7326374-cccbdd9401f9b0c1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 但是我们这块X参数平时用的并不多,用的更多而是后面这块XX参数。 ### XX参数 这块参数用的是非常多,相信许多同学在网上会经常看到XX参数来设置JVM。我们先来看下它都有什么特点。 特点: - 非标准化参数化 - 相对不稳定 - 主要用于JVM调优和Debug #### 分类 主要分为两大类 - Boolean类型 格式:-XX:[+-]表示启用或者禁用name属性。其中+号表示启用该参数,-号表示禁用该参数。 比如: ``` -XX:+UseConcMarkSweepGC ``` 表示启用了CMS垃圾收集器 ``` -XX:+UseG1GC ``` 表示启用了G1垃圾收集器 - 非Boolean类型 格式:-XX:=表示name属性的值是value,主要是以key,value形式存在。 比如: ``` -XX:MaxGCPauseMillis=500 ``` 表示GC最大的停顿时间是500ms。 ``` -XX:GCTimeRatio=19 ``` 表示GCTimeRatio等于19。 #### 小结 > 以上先简单了解一下分为两大类:Boolean 与 非Boolean类型。Boolean是带有+-号,而非Boolean类型是key,value形式存在,中间用等号。 ### -Xmx -Xms 这两个参数,相信许多小伙伴们都见过。这两个参数分别是一个设置最大内存,一个设置最小内存。 - 不是X参数,而是XX参数 1.-Xms等价于-XX:InitialHeapSize 2.-Xmx等价于-XX:MaxHeapSize 3.-Xss等价于-XX:ThreadStackSize `InitialHeapSize`初始堆的大小。`MaxHeapSize`最大的堆大小。`ThreadStackSize`线程堆栈大小 可以先简单查看下运行后的进程,最大的堆大小值。 ![最大的堆大小](https://upload-images.jianshu.io/upload_images/7326374-84a41d5f01493c26.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 查看一下线程的堆栈大小。 ![线程堆栈大小](https://upload-images.jianshu.io/upload_images/7326374-67d13e783e81fc4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 可以看到这块的线程堆栈大小有1024k,默认情况不做修改的话,堆栈其中的一个线程就有1024k,这线程应该还是比较大的。我们在调优的时候还是会把这个值调小一些。 这次就先介绍到这里,下一章讲介绍**如何查看JVM运行时参数**。 ## 推荐 * [400道——大厂Java选择题](https://mp.weixin.qq.com/s?__biz=MzIwMTg3NzYyOA==&mid=2247484198&idx=1&sn=9c9d8c2dffe005e0cf76f13af815209a&chksm=96e67235a191fb235caac777b002e2b0b519a4d540341352518a3c6939c03f164adb1cd3d659&token=1610544259&lang=zh_CN#rd) * [[Java网络系列面试题]常见web攻击有哪些?](https://mp.weixin.qq.com/s?__biz=MzIwMTg3NzYyOA==&mid=2247484207&idx=1&sn=72bc31c8b141013fdb3ba4cf77c20326&chksm=96e6723ca191fb2a5f17a9918b006b6b3d4341d166c4aaf497ad2d7bcff2d4ef03b4e40bd4dd&token=1394220820&lang=zh_CN#rd) * [[Java网络安全系列面试题] GET 和 POST 的区别在哪里?](https://mp.weixin.qq.com/s?__biz=MzIwMTg3NzYyOA==&mid=2247484212&idx=1&sn=ea30e28ab5ce9565cdf8b4ca7c273001&chksm=96e67227a191fb31e5886c71d1ec88315c0a526d648a998aabb5f1f4111c448f8d780270221c&token=1170466385&lang=zh_CN#rd) ## 文末 文章收录至 Github: [https://github.com/CoderMerlin/coder-programming](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2FCoderMerlin%2Fcoder-programming) Gitee: [https://gitee.com/573059382/coder-programming](https://links.jianshu.com/go?to=https%3A%2F%2Fgitee.com%2F573059382%2Fcoder-programming) 欢迎**关注**并star~ ![微信公众号](https://upload-images.jianshu.io/upload_images/7326374-0c9d0fbd2c954edb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

加载全部内容

相关教程
猜你喜欢
用户评论