JVM學習之JVM參數和常用命令

JVM參數

JVM參數分爲四種: 標準參數、-X參數 、-XX參數、其他參數
1.標準參數
-version、 -help、 -server、 -cp
2. -X參數
非標準參數,也就是在JDK各個版本中可能會變動
-Xint 解釋執行
-Xcomp 第一次使用就編譯成本地代碼
-Xmixed 混合模式,JVM自己來決定
3. -XX參數
使用得最多的參數類型:非標準化參數,相對不穩定,主要用於JVM調優和Debug
a.Boolean類型
格式:-XX:[±] +或-表示啓用或者禁用name屬性
比如:-XX:+UseConcMarkSweepGC 表示啓用CMS類型的垃圾回收器
-XX:+UseG1GC 表示啓用G1類型的垃圾回收器
b.非Boolean類型
格式:-XX=表示name屬性的值是value
比如:-XX:MaxGCPauseMillis=500
4.其他參數
-Xms1000等價於-XX:InitialHeapSize=1000
-Xmx1000等價於-XX:MaxHeapSize=1000
-Xss100等價於-XX:ThreadStackSize=100

5.查看參數
java -XX:+PrintFlagsFinal -version —>就會列出所有的
"=“表示默認值,”:="表示被用戶或JVM修改後的值
可以直接配置在idea ,然後啓動時就會打印出來
在這裏插入圖片描述
當然也可以修改默認參數,比如添加 -Xms100M -Xmx100M
這裏展示的104857600 表示的是Byte
在這裏插入圖片描述
6.設置參數的幾種方式
開發工具中設置比如IDEA,eclipse
運行jar包的時候:java -XX:+UseG1GC xxx.jar
web容器比如tomcat,可以在腳本中的進行設置
通過jinfo實時調整某個java進程的參數(參數只有被標記爲manageable的flags可以被實時修改)

JVM常用命令–都是直接使用(jdk/bin,配置了環境變量即可)

1.jps查看java進程
cmd中打印jps
在這裏插入圖片描述
2. jinfo:
(1)實時查看和調整JVM配置參數
(2)查看
jinfo -flag name PID 查看某個java進程的name屬性的值
例如: jinfo -flag MaxHeapSize 10236
在這裏插入圖片描述
例如: jinfo -flag UseG1GC 10236 (減號表示沒有使用)
在這裏插入圖片描述
(3)修改
參數只有被標記爲manageable的flags可以被實時修改
jinfo -flag [+|-] PID
jinfo -flag = PID
(4)查看曾經賦過值的一些參數
jinfo -flags PID
4.jstat
(1)查看虛擬機性能統計信息
(2)查看類裝載信息
jstat -class PID 1000 10 查看某個java進程的類裝載信息,每1000毫秒輸出一次,共輸出10次
在這裏插入圖片描述
(3)查看垃圾收集信息 jstat -gc PID 1000 10
在這裏插入圖片描述
4.jstack
(1)查看線程堆棧信息
jstack PID
排查死鎖案例

if(flag) {
      while(true) {
        synchronized(MyLock.obj1) {
          System.out.println(Thread.currentThread().getName()+"----if
獲得obj1鎖");
          synchronized(MyLock.obj2) {
            System.out.println(Thread.currentThread().getName()+"---
-if獲得obj2鎖");
         }
   }
    else {
      while(true){
        synchronized(MyLock.obj2) {
          System.out.println(Thread.currentThread().getName()+"----否則
獲得obj2鎖");
          synchronized(MyLock.obj1) {
            System.out.println(Thread.currentThread().getName()+"---
-否則獲得obj1鎖");
         }
     }

兩個線程搶對方持有的鎖,卡在這裏,產生死鎖
在這裏插入圖片描述
使用jstack把打印信息拉到最後可以發現
在這裏插入圖片描述
5.jmap打印出堆內存相關信息
在idea中配置 成 -XX:+PrintFlagsFinal -Xms300M -Xmx300M
在命令行jmap -heap PID查看
在這裏插入圖片描述
6.dump出堆內存相關信息
手動:jmap -dump:format=b,file=heap.hprof PID
自動:設置idea上
-XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath=heap.hprof
啓動之後,找可以溢出的代碼啓動,然後訪問即可。

發佈了14 篇原創文章 · 獲贊 8 · 訪問量 834
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章