一. 引言,環境安裝測試中的代碼解析

1. HotSpot(TM) 64-bit Server VM(build 25.181-b13,mixed mode),這是多種
HotSopt是多種虛擬機中的一種,是一個
熱點探測技術
Hotspot虛擬機特點: 虛擬機會加載class文件,每次加載文件都會對該class文件進行標記,當標記到達一定的閥值會觸發
JIT機制
JIT機制解釋:即使編譯,對頻繁使用的CLass文件進行緩存,直接編譯成虛擬機可以使用的文件,並進行緩存
2.Class文件是一個中間層文件, 虛擬機不能直接執行這個文件,虛擬機會將該文件編譯成本地代碼,
HopSpot的兩種運行機制:Server和Client, 采用兩套機制來初始化自己
Client:更多的是基於桌面應用進行的虛擬機優化,B/S結構,客戶端是可以並發的,為虛擬機分配的空間相對Servler來說要小很多,主要是為了在客戶端環境中減少啟動時間而優化;
Server:分配給虛擬機的的空間比CLient大,優化方式也不同,處理大流量請求的時候效率比較高,在服務器環境中最大程度的提高執行效率
缺點: 會造成空間浪費,它申請給虛擬機的內存空間比較大
二. Java虛擬機的基本結構

1. 類加載子系統,參考筆記
類加載器
- 類加載器:
- 讀取Class文件,並將其轉換成虛擬機可以使用的對象,將類的信息存到方法區中
- 方法區:
- 存儲加載器傳遞的類的信息
- 存放常量池信息,包括字符串和數字常量
- java堆
- 堆的區域是線程共享的
- 堆得內存大小由jvm決定
- 存儲創建的對象信息
- java棧
- 每一個線程都有一個棧
- 線程創建的時候創建
- 保存幀空間
-
舉例,遞歸中,方法每次調用自己的時候,要進行壓棧操作么,當一個新的方法壓棧的時候原來的方法中還有其他地方沒有運行完,還有一些數據需要保存, 這個保存點就叫做棧幀
-
保存局部變量,對象地址,方法,方法參數,還有方法的調用信息
- 直接內存
- 是物理內存的映射,大小不由虛擬機分配,理論上大小無限,實際按照物理內存的大小
- 允許java的NIO模塊直接調用
- 垃圾回收系統
- 作用在java堆,java棧,方法區中
- 自動化,不需要手動,會自動檢測,標識,尋找無用的對象並進行回收,全程靜默
- 本地方法棧
- 存放本地方法
- 本地方法指的是當前操作系統的api,虛擬機是需要本地系統的api才能夠運行的
- pc寄存器
- 主要用來分辨某一個線程正在操作的方法類型,並且被虛擬機選擇調用虛擬機自己的方法
- 如果當前線程正在執行的是本地操作系統的方法,會返回undefine
- 如果在操作虛擬機方法,則返回該方法
ps:
虛擬機中不可能只存在一條線程,虛擬機中的線程任意狀態一定是在執行方法;
- 執行引擎
-
執行引擎負責執行虛擬機的字節碼,都采用 JIT (Just In Time) 即時編譯,編譯成機器碼后再執行
三.總結
jvm為每個新創建的線程都分配一個堆棧;
附件列表
https://www.cnblogs.com/lyuweigh/p/36e52fac9a5656dca084eedb06b09129.html