JVM參數
3.1.1 標準參數
-version
-help
-server
-cp
3.1.2 -X參數
非標準參數,也就是在JDK各個版本中可能會變動
```
-Xint 解釋執行
-Xcomp 第一次使用就編譯成本地代碼
-Xmixed 混合模式,JVM自己來決定
3.1.3 -XX參數
> 使用得最多的參數類型
>
> 非標準化參數,相對不穩定,主要用于JVM調優和Debug
```
a.Boolean類型
格式:-XX:[+-]<name> +或-表示啟用或者禁用name屬性
比如:-XX:+UseConcMarkSweepGC 表示啟用CMS類型的垃圾回收器
-XX:+UseG1GC 表示啟用G1類型的垃圾回收器
b.非Boolean類型
格式:-XX<name>=<value>表示name屬性的值是value
比如:-XX:MaxGCPauseMillis=500
```
3.1.4 其他參數
```
-Xms1000M等價于-XX:InitialHeapSize=1000M
-Xmx1000M等價于-XX:MaxHeapSize=1000M
-Xss100等價于-XX:ThreadStackSize=100
```
> 所以這塊也相當于是-XX類型的參數
3.1.5 查看參數
> java -XX:+PrintFlagsFinal -version > flags.txt
> 值得注意的是"="表示默認值,":="表示被用戶或JVM修改后的值
> 要想查看某個進程具體參數的值,可以使用jinfo,這塊后面聊
> 一般要設置參數,可以先查看一下當前參數是什么,然后進行修改
3.1.6 設置參數的常見方式
* 開發工具中設置比如IDEA,eclipse
* 運行jar包的時候:java -XX:+UseG1GC xxx.jar
* web容器比如tomcat,可以在腳本中的進行設置
* 通過jinfo實時調整某個java進程的參數(參數只有被標記為manageable的flags可以被實時修改)
3.1.7 實踐和單位換算
1Byte(字節)=8bit(位)
1KB=1024Byte(字節)
1MB=1024KB
1GB=1024MB
1TB=1024GB
```
```
(1)設置堆內存大小和參數打印
-Xmx100M -Xms100M -XX:+PrintFlagsFinal
(2)查詢+PrintFlagsFinal的值
:=true
(3)查詢堆內存大小MaxHeapSize
:= 104857600
(4)換算
104857600(Byte)/1024=102400(KB)
102400(KB)/1024=100(MB)
(5)結論
104857600是字節單位
```
3.1.8 常用參數含義
| 參數 | 含義 | 說明 |
| :---------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: |
| -XX:CICompilerCount=3 | 最大并行編譯數 | 如果設置大于1,雖然編譯速度會提高,但是同樣影響系統穩定性,會增加JVM崩潰的可能 |
| -XX:InitialHeapSize=100M | 初始化堆大小 | 簡寫-Xms100M |
| -XX:MaxHeapSize=100M | 最大堆大小 | 簡寫-Xms100M |
| -XX:NewSize=20M