JVM虛擬機的大概了解(新人面試必看!)


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

 
 
 
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM