常用JVM命令参数

之后写的东西就会用到虚拟机参数了,现在这里汇个总自己平时用到的、看到的一些虚拟机参数。现在看不懂没关系,反正之后都会用到的:

(1)-Xms20M

表示设置堆容量的最小值为20M,必须以M为单位

(2)-Xmx20M

表示设置堆容量的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免堆自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高

(3)-verbose:gc

表示输出虚拟机中GC的详细情况

(4)-Xss128k

表示可以设置虚拟机栈的大小为128k

(5)-Xoss128k

表示设置本地方法栈的大小为128k。不过HotSpot并不区分虚拟机栈和本地方法栈,因此对于HotSpot来说这个参数是无效的

(6)-XX:PermSize=10M

表示JVM初始分配的永久代的容量,必须以M为单位

(7)-XX:MaxPermSize=10M

表示JVM允许分配的永久代的最大容量,必须以M为单位,大部分情况下这个参数默认为64M

(8)-Xnoclassgc

表示关闭JVM对类的垃圾回收

(9)-XX:+TraceClassLoading

表示查看类的加载信息

(10)-XX:+TraceClassUnLoading

表示查看类的卸载信息

(11)-XX:NewRatio=4

表示设置年轻代:老年代的大小比值为1:4,这意味着年轻代占整个堆的1/5

(12)-XX:SurvivorRatio=8

表示设置2个Survivor区:1个Eden区的大小比值为2:8,这意味着Survivor区占整个年轻代的1/5,这个参数默认为8

(13)-Xmn20M

表示设置年轻代的大小为20M

(14)-XX:+HeapDumpOnOutOfMemoryError

表示可以让虚拟机在出现内存溢出异常时Dump出当前的堆内存转储快照

(15)-XX:+UseG1GC

表示让JVM使用G1垃圾收集器

(16)-XX:+PrintGCDetails

表示在控制台上打印出GC具体细节

(17)-XX:+PrintGC

表示在控制台上打印出GC信息

(18)-XX:PretenureSizeThreshold=3145728

表示对象大于3145728(3M)时直接进入老年代分配,这里只能以字节作为单位

(19)-XX:MaxTenuringThreshold=1

表示对象年龄大于1,自动进入老年代

(20)-XX:CompileThreshold=1000

表示一个方法被调用1000次之后,会被认为是热点代码,并触发即时编译

(21)-XX:+PrintHeapAtGC

表示可以看到每次GC前后堆内存布局

(22)-XX:+PrintTLAB

表示可以看到TLAB的使用情况

(23)-XX:+UseSpining

开启自旋锁

(24)-XX:PreBlockSpin

更改自旋锁的自旋次数,使用这个参数必须先开启自旋锁

怎么用MyEclipse设置虚拟机参数

右键类-->Run as-->Run Configurations...

Java Application里面选到自己的类,选择Arguments,VM arguments空白部分就可以设置虚拟机参数了。如果点击了Run Configurations没有出现自己的类的话也没关系,双击一下Java Application就好了

后记

Java虚拟机参数有上百个,性能调优中很大一块就是选择这上百个参数中的某些重要参数进行设置,并且根据项目运行情况对参数进行不断调整以求达到一个性能最佳点。性能调优说有捷径也有捷径,百度搜一份别人推荐的JVM参数设置改改就好了,那至于具体好不好就说不上了,但起码保证能用吧;性能调优说没捷径也没捷径,如果对JVM的性能有严苛的要求并且希望细化到每一个小点,达到能达到的最佳值,那首先就必须对于Java虚拟机,对于每一个虚拟机参数有着深刻的理解才行。最近几年兴起了一个叫做性能调优师的职位,也证明了性能优化的重要性,反正从个人的角度看,性能调优绝对是一门学问,不是那么简单的,打好基础才是王道。

### JVM常用命令及功能介绍 #### 1. **jps (Java Virtual Machine Process Status Tool)** `jps` 是一种用于显示当前系统中所有 Java 进程的状态的工具。它可以帮助开发者快速定位正在运行的 Java 应用程序以及其对应的进程 ID(PID)。通过 `jps -v` 参数,还可以进一步查看启动该应用程序时所使用的 JVM 参数和选项[^1]。 ```bash $ jps -lv ``` 上述命令将列出所有 Java 进程及其完整的类路径和传递给 JVM参数。 --- #### 2. **jinfo (Java Configuration Information)** `jinfo` 工具允许用户动态获取并调整正在运行的 Java 虚拟机实例的相关配置信息。这包括但不限于 JVM 启动时指定的各种参数设置。此外,在某些特定场景下,也可以利用此工具来修改部分 JVM 配置项[^2]^,^[^4]。 例如,要查询某个 PID 对应的 JVM 所加载的所有参数: ```bash $ jinfo -flags <pid> ``` 如果需要生成堆转储文件,则可以通过如下方式实现;不过需要注意的是,这一操作可能带来一定的性能开销,尤其是在大内存环境中更需谨慎对待: ```bash $ jmap -dump:live,format=b,file=heap.bin <pid> ``` 尽管这里提到的是 `jmap`, 它同样属于 JDK 自带的一系列诊断工具之一,与本节讨论的内容密切相关。 --- #### 3. **jstat (Java Virtual Machine Statistics Monitoring Tool)** 作为一款强大的监控利器,`jstat` 提供了关于 JVM 性能统计方面的详尽数据,涵盖了诸如垃圾回收行为、方法区使用状况等多个维度的信息展示服务[^3]. 用户能够依据实际需求选取不同的观测角度来进行深入分析: - `-gcutil`: 显示 GC 活动概览; - `-gccapacity`: 展现各代对象存储区域容量详情; - `-class`: 关注类加载器的工作表现等等... 下面给出一段简单的脚本例子以便更好地理解如何运用这些选项完成周期性的采样工作: ```bash #!/bin/bash for i in {1..10}; do echo "Sample $i" jstat -gcutil $(pgrep java) 1000 1 | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}' done ``` 以上代码片段每隔一秒打印一次目标进程中有关垃圾收集利用率的变化趋势记录下来,并附加时间戳便于后续追踪审查之便. --- #### 4. **其他重要说明** 值得注意的是,尽管目前市面上存在众多针对 JVM 调优设计得更加友好的图形界面型产品可供选择,但从原理层面出发掌握好基础命令行交互手段依旧十分必要。因为它们构成了更高层次解决方案的基础构建模块. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值