JVM虛擬機器
一、Java虛擬機器裡面有什麼東西
1.類載入子系統,方法區,Java堆,直接記憶體,垃圾回收器,執行引擎,Java棧,本地方法棧,PC暫存器。
(1)類載入子系統:從網路或者檔案系統中載入Class檔案。
(2)方法區:存字串,類的資訊,靜態方法,靜態常量等。
(3)Java堆:存Java物件(重點講)
(4)直接記憶體:執行NIO庫操作需要大量讀寫,在直接記憶體裡執行效率更快。
(5)垃圾回收器:對垃圾回收演算法的實現。(重點講)
(6)執行引擎:比如Hotspot(熱點探測)。執行引擎是將Class檔案編譯成本地的機器碼檔案,熱點探測就是頻繁將有些Class檔案轉換成本地機器碼檔案的Class檔案轉換成本地機器碼檔案快取在本地,後面就直接讀取快取。在JDK1.3開始測試,JDK1.5開始Hotspot開始商用。
(7)Java棧:存區域性變數,引數,方法呼叫,方法返回等
(8)本地方法棧:存系統方法呼叫,系統方法返回等
(9)PC暫存器:主要功能就是區別執行的方法是Java方法還是本地方法,如果是本地方法PC暫存器裡存的undefined。
二、Java堆
注意點:JDK1.7以前Java堆分為新生代,老年代,持久代。JDK1.7開始就測試取消持久代,因為持久代存的是常量,類的資訊,靜態常量等,可以發現和方法區存的東西基本一致。JDK1.8就已經取消持久代。
1.新生代:
(1)新生代裡分為三個區域:eden,s0,s1。剛產生的物件是出生在eden區裡(大物件是直接放在老年代裡),當eden區快滿時,呼叫minor gc採用複製演算法(後面說)將存活的物件放到是s1中,如果s0中也有則也採用複製演算法,把存活物件放在s1中。然後清空s0和eden區,然後s0和s1交換位置。
2.老年代:
(1)新生代裡的物件每經歷一次Minor GC後,如果存活它的年齡加一。如果年齡到達15(JVM裡預設15,可以修改),則放到老年代中。老年代中的垃圾回收器叫Full GC(Minnor GC和Full GC都是對新生代及老年代裡垃圾回收器的總稱,其下還能細分,後面講)。
三、垃圾回收器
1.垃圾回收演算法
垃圾回收器是對垃圾回收演算法的實現,我們先看看有哪些垃圾回收演算法。
(1)引用記數法:Java堆裡的物件,每有一個它的引用,它的計數就加一,每減少一個它的引用,它的計數就減一。GC就回收計數為0的物件。
(2)複製演算法:eden和s0區的物件在沒被清除掉並且年齡沒到15,則複製物件按順序存放到s1中。
(3)標記清除演算法:從物件的跟引用開始做標記,如果沒被標記就清除。缺點:產生碎片,工作時候使用者程式停止工作。
(4)標記整理演算法:從物件的跟引用開始做標記,如果沒被標記就清除。標記的物件則壓縮物件,放在按順序放在堆裡的一塊裡。缺點:工作時候使用者程式停止工作。
2.7個垃圾回收器
seral,parNew,parille scavege屬於新生代,CMS(CounConrrent make sweep),seral Old,parille Old屬於老年代。G1(gebarge first)新生代,老年代通吃。
(1)seral垃圾回收器(序列收集器):
1)運用演算法:複製演算法
2)缺點:需要兩倍空間,工作時候使用者程式停止。
(2)parNew垃圾回收器(並行收集器):
1)運用演算法:複製演算法
2)缺點:需要兩倍空間,工作時候使用者程式停止, 停止時間比seral垃圾回收器的停止時間短。
3)單核CPU運用此回收器不一定比用seral回收器 好,CPU邏輯數越多,此回收器越好用
(3)parille scavege垃圾回收器(並行收集器):
1)運用演算法:複製演算法
2)它關注的是系統吞吐量,系統吞吐量 = 執行使用者 程式時間/(執行使用者時間+JVM執行時間),開 發Java桌面級 應用,大量科學計算用它比較好。
(4)CMS(counConrrent make sweep併發收集器):
1)併發與並行的區別是,併發是使用者工作執行緒與 JVM執行緒同時執行(實質上也是交替進行,因為 CPU的排程機制),而並行不包含使用者工作線 程。
2)運用演算法:標記整理演算法
(5)seral Old垃圾回收器(序列收集器):
1)運用演算法:標記整理演算法
2)缺點:工作時候使用者程式停止。
(6)parille Old垃圾回收器(並行收集器):
1)運用演算法:標記整理演算法
2)缺點:工作時候使用者程式停止,但是比使用seral Old垃圾回收器停止時間短。
(7)G1垃圾回收器(Gebarge first)
1)運用演算法:標記清除演算法
3.新生代及老年代垃圾回收器匹配關係
1.CMS垃圾回收器可以和所有新生代的垃圾回收器配合工作
2.seral Old垃圾回收器可以和所有新生代的垃圾回收器配合工作
3.parille Old垃圾回收器只能和parille scavege垃圾回收器配合工作
4.G1垃圾回收器能和所有新生代及老年代的垃圾回收器配合工作,甚至新生代及老年代都是它也可以
結語:這篇文章只是對JVM的大致講解。講解顆粒度還能更細,然後還有對JVM的引數講解及JAVA提供的對JVM使用的小工具有時間我再寫一篇部落格。有疑問的可以加我QQ 1374487940,請做好備註
相關文章
- JVM 虛擬機器JVM虛擬機
- JVM 虛擬機器 GCJVM虛擬機GC
- Java虛擬機器(JVM)Java虛擬機JVM
- 解讀JVM虛擬機器JVM虛擬機
- JVM虛擬機器基礎JVM虛擬機
- JVM虛擬機器詳解JVM虛擬機
- jvm虛擬器JVM
- Java基礎:Java虛擬機器(JVM)Java虛擬機JVM
- 虛擬機器系列 | JVM類載入機制虛擬機JVM
- JVM(五)----虛擬機器類載入機制JVM虛擬機
- JVM(7)-虛擬機器類載入機制JVM虛擬機
- Java JVM——5.Java虛擬機器棧JavaJVM虛擬機
- JVM(三)-java虛擬機器類載入機制JVMJava虛擬機
- JVM學習-虛擬機器類載入機制JVM虛擬機
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- JVM-虛擬機器執行子系統JVM虛擬機
- JVM學習筆記五--虛擬機器棧JVM筆記虛擬機
- JVM虛擬機器Class類檔案研究分析JVM虛擬機
- JVM(二)Java虛擬機器組成詳解JVMJava虛擬機
- Java虛擬機器:JVM架構與垃圾回收Java虛擬機JVM架構
- JVM(四)-虛擬機器物件JVM虛擬機物件
- 【Java虛擬機器規範】JVM類載入機制Java虛擬機JVM
- 深入理解JVM,虛擬機器類載入機制JVM虛擬機
- JVM虛擬機器-垃圾回收機制與垃圾收集器概述JVM虛擬機
- java虛擬機器和Dalvik虛擬機器Java虛擬機
- Android 虛擬機器 Vs Java 虛擬機器Android虛擬機Java
- 虛擬機器系列 | JVM執行時資料區虛擬機JVM
- Java跨平臺原理與Java虛擬機器(JVM)Java虛擬機JVM
- JVM虛擬機器記憶體結構簡析JVM虛擬機記憶體
- JVM虛擬機器-執行時資料區概述JVM虛擬機
- 【JVM進階之路】一:Java虛擬機器概覽JVMJava虛擬機
- jvm記憶體區域之虛擬機器棧JVM記憶體虛擬機
- jdk8:jvm虛擬機器記憶體模型JDKJVM虛擬機記憶體模型
- 深入理解JVM虛擬機器3:垃圾回收器詳解JVM虛擬機
- JVM程式計數器,虛擬機器棧,本地方法棧JVM虛擬機
- 深入理解JVM(③)虛擬機器的類載入時機JVM虛擬機
- 深入理解JVM虛擬機器6:深入理解JVM類載入機制JVM虛擬機
- JVM系列(一) -淺談虛擬機器的成長史JVM虛擬機