jvm簡單瞭解

java虛擬機 jvmjava

jvmjre的一部分算法

當數據被放入JVM的時候,數據會被分解到不一樣的位置多線程

 

java運行時內存劃分併發

線程共享區:jvm

堆區和方法區性能

線程私有區:優化

虛擬機棧、本地方法棧和程序計數器spa

堆區放真實對象線程

虛擬機棧放java方法3d

本地方法棧放 native方法

方法區 類的信息、常量、靜態變量

程序計數器  線程執行到第幾行

 

 

 

堆中分

新生、老年、永久代

新生區分爲 eden  s0  s1   811

 

常見的垃圾回收器

 

 

 

Serial收集器:單線程  它只會使用一個 CPU 或一條收集線程去完成收集工做,而且在進行垃圾回收時必須暫停其它全部的工做線程直到收集結束。

 

parNew收集器:多線程  能夠認爲是serial的多線程版本

 

CMS收集器: 是一種以獲取最短回收停頓時間爲目標的收集器 基於標記清除算法實現

 

G1收集器: 面向服務端的垃圾回收器,是Oracle JDK 9之後的默認GC選項

優勢:並行與併發、分代收集、空間整合、可預測停頓

 

垃圾回收算法:

複製算法

標記-清除算法

標記整理-算法

 

JVM調優

 

類的生命週期:

加載 鏈接(驗證  準備  解析) 初始化 使用 卸載

 

加載:將.class文件從磁盤讀取到內存

驗證:驗證字節碼的正確性

準備:給類的靜態變量分配內存並賦予默認值

解析:裝載器裝入類所引用的其餘全部類

 

類加載器的種類

啓動類加載器

負責加載JRE的核心類庫,如JRE目標下的rt.jar,charsets.jar等。

擴展類加載器

負責加載jre擴展目錄ext中的jar

系統類加載器

負責加載classpath路徑下的類包

用戶自定義加載器

負責加載用戶自定義路徑下的類包

 

類加載器的關係:向上委託的關係

全盤負責委託機制

當一個ClassLoader加載一個類的時候,除非顯示的使用另外一個ClassLoader,該類所依賴和引用的類也由這個ClassLoader載入

雙親委派機制(模型)

指先委託父加載器尋找目標類,在找不到的狀況下在本身的路徑中查找並載入目標類

 

JVM性能調優監控命令

垃圾回收對堆空間作回收,棧空間內存隨着線程的消亡而消亡,並不受jvm垃圾回收的管轄!

jps:經過jps查詢進程的id pid

jinfo:查看正在運行的java程序的擴展參數

查看JVM的參數

jinfo -flags 11740

 

 

 

 

 

.調優

JVM調優主要就是調整下面兩個指標

停頓時間:垃圾收集器作垃圾回收中斷應用執行的時間。-XX:MaxGCPauseMillis

吞吐量:垃圾收集的時間和總時間的佔比:1/(1+n),吞吐量爲1-1/(1+n)。-XX:GCTimeRatio=n

GC調優步驟

1.打印GC日誌

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:c:/log/gc.log

Tomcat能夠直接加載JAVA_OPTS變量

2.分析日誌獲得關鍵性指標

3.分析GC緣由,優化JVM參數

Parallel Scavenge收集器(默認)

分析日誌:

第一次調優,設置Metaspace大小:增大元空間大小 ()-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M

第二次調優,增大年輕代動態擴容增量(默認是20%),能夠減小YGC: -XX:YoungGenerationSizeIncrement=30

合併調優

-XX:+PrintGCDetails -XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M -XX:YoungGenerationSizeIncrement=30 -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:c:/log/gc-2.log

 

 

 

使用G1收集器收集日誌

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseG1GC -Xloggc:./log/gc-g1.log

相關文章
相關標籤/搜索