JVM的主要組" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 學習筆記-(java虛擬機)

學習筆記-(java虛擬機)

時間:2023-06-26 03:09:01 | 來源:網(wǎng)站運營

時間:2023-06-26 03:09:01 來源:網(wǎng)站運營

學習筆記-(java虛擬機):

JVM定義及作用:

JVM是java Virtual Machine (java 虛擬機),是一個虛擬計算機,也是java程序是愛杭州跨平臺的基礎。其作用是加載Java程序,將字節(jié)碼翻譯成機器碼再交給CPU執(zhí)行的虛擬計算機。

JVM的主要組成:

工作流程:

首先程序在執(zhí)行前將java代碼(.java)轉(zhuǎn)變成字節(jié)碼(.class),JVM通過;類加載器將字節(jié)碼加載到內(nèi)存中,由于字節(jié)碼文件是JVM的一套指令集規(guī)范,并不能直接交給底層操作系統(tǒng)執(zhí)行,因此需要特定的命令解析器執(zhí)行引擎將字節(jié)碼翻譯成底層的機器碼,再交給CPU執(zhí)行,CPU執(zhí)行過程中需要調(diào)用本地庫接口來完成整個程序的運行。

JVM的內(nèi)存布局:

不同的虛擬機存在不同,但都會遵循java虛擬機規(guī)范。java 8虛擬機規(guī)范規(guī)定,內(nèi)存布局包括以下幾個區(qū)域:

1.程序計數(shù)器

記錄正在執(zhí)行的虛擬機字節(jié)碼指令的地址(如果正在執(zhí)行的是native方法,該計數(shù)器的值為undefined)。此內(nèi)存區(qū)域是唯一一個在java虛擬機規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域。

線程私有。由于java虛擬機的多線程是通過線程輪流切換并分配處理器執(zhí)行時間的方式實現(xiàn)的。為了線程切換后能恢復到正確的執(zhí)行位置,每條線程都需要一個獨立的程序計數(shù)器,各線程之間的計數(shù)器互不影響,獨立存儲。

2.java虛擬機棧

每個java方法在執(zhí)行的同時會創(chuàng)建一個棧幀用來存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。從方法調(diào)用直至執(zhí)行完成的過程,對應著一個棧幀在java虛擬機棧中入棧和出棧的過程。線程私有,生命周期與線程相同。

該區(qū)域有兩種異常:

3.本地方法棧

類似于java虛擬機棧,區(qū)別是本地方法棧服務于本地方法。

4.java堆

java堆是java虛擬機中內(nèi)存最大的一塊。在虛擬機啟動時創(chuàng)建,被所有線程共享。

存放對象實例。垃圾收集器主要管理的就是java堆。

現(xiàn)在的垃圾收集器基本采用分代收集算法,主要思想是針對不同類型的對象采取不同的垃圾回收算法,java堆可以分為兩塊:

動態(tài)擴展內(nèi)存失敗會拋出OutOfMemoryError異常。

5.方法區(qū)

被所有線程共享,用于存放已被加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等信息。

動態(tài)擴展內(nèi)存失敗會拋出OutOfMemoryError異常。

運行時常量池是方法區(qū)的一部分。保存Class文件中的符號引用、翻譯出來的直接引用。

垃圾收集

垃圾收集主要針對java堆和方法區(qū)。

1.判斷一個對象是否可被回收

2.java的4中引用方式

3.垃圾回收算法

垃圾收集器

Minor GC 和Full GC:

Full GC的觸發(fā)條件

  1. 調(diào)用System.gc():不建議使用
  2. 老年代空間不足
  3. 空間分配擔保失敗
  4. JDK1.7及之前的永久代空間不足
  5. Concurrent Mode Failure (CMS GC工程中老年代空間不足)

內(nèi)存分配策略

  1. 對象優(yōu)先在Eden分配
  2. 大對象直接進入老年代
  3. 長期存活的對象進入老年代
  4. 動態(tài)對象年齡判定:在Survivor中相同年齡所有對象總和大于Survivor空間的一半,則年齡大于等于該年齡的對象直接進入老年代。
  5. 空間分配擔保:在發(fā)生Minor GC之前,虛擬機先檢查老年代最大可用連續(xù)空間是否大于新生代所有對象總空間,如果條件成立,Minor GC確認安全;如果不成立,虛擬機查看HandlePromotionFailure的值是否允許擔保失敗,如果允許繼續(xù)檢查老年代最大可用的連續(xù)空間是否大于歷次晉升到老年代對象的平均大小,如果大于嘗試進行Minor GC;如果小于或不允許冒險,就進行Full GC。

類加載器

類是在運行期間第一次使用時動態(tài)加載的,而不是一次性加載所有類。

類加載過程包括加載、驗證、準備、解析、初始化這5個階段。

1.加載

2.驗證

確保Class文件的字節(jié)流中包含的信息符合當前虛擬機的要求,并不會威海虛擬機的安全。

3.準備

4.解析

虛擬機將常量池中的符號引用替換為直接引用。

5.初始化

開始執(zhí)行類中定義的java程序代碼。初始化階段是虛擬機執(zhí)行類構造器<clinit>()方法的過程。

雙親委派模型

如果一個類加載器收到一個類加載的請求,首先將類加載請求轉(zhuǎn)發(fā)到父類加載器,只有當父類加載器無法完成時才嘗試自己加載。

java內(nèi)存模型

并發(fā)注意操作的原子性、可見性、有序性。

volatile

關鍵字volatile是java虛擬機提供的最輕量級的同步機制。

happens-before(先行發(fā)生原則)

這個原則是判斷數(shù)據(jù)是否存在競爭、線程是否安全的主要依據(jù)。先行發(fā)生是 Java 內(nèi)存模型中定義的兩項操作之間的偏序關系

java線程

線程狀態(tài)轉(zhuǎn)換

參考資料:



關鍵詞:虛擬,筆記,學習

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉