JAVA 虛擬機器

來源:互聯網
上載者:User

標籤:指標   地方   堆棧   虛擬機器啟動   基本概念   類資訊   字串   記憶體回收機制   空間   

# JAVA 虛擬機器 ## JAVA 虛擬機器概述和基本概念 ### 類載入子系統、方法區、Java堆、直接記憶體、Java棧、本地方法棧、記憶體回收系統、PC寄存器、執行引擎 + 類載入子系統:負責從檔案系統或者網路中載入 Class 資訊,載入的資訊存放在一塊稱之為方法區的記憶體空間。+ 方法區:就是存放類資訊,常量資訊,常量池資訊,包括字串面量和數字常量等。+ Java 堆:在 JAVA 虛擬機器啟動的時候建立 Java 堆,他是 Java 程式最主要的記憶體工作區域,幾乎所有的對象執行個體都存放到 Java 堆中,堆空間是所有線程共用的。+ 直接記憶體:Java 的 NIO 庫允許 Java 程式使用直接記憶體,從而提高效能,通常直接記憶體速度會優於 Java 堆。讀寫頻繁的場合可能會考慮使用。+ 每一個虛擬機器線程都會有一個私人的棧,一個線程的 Java 棧線上程建立的時候被建立,Java 棧中儲存著局部變數、方法參數、同時 Java 的方法調用、傳回值等。+ 本地方法棧和 Java 棧非常類似,最大不同為本地方法棧用於本地方法調用。JAVA 虛擬機器允許 Java 直接調用本地方法(通常使用 C 編寫)。+ 垃圾收集系統是 Java 的核心,也是必不可少的,Java有一套自己的垃圾清理機制,開發人員無需手工清理。+ PC(Program Counter) 寄存器也是每個線程私人的空間,Java虛擬機器會為每個線程建立 PC 寄存器,在任意時刻,一個 Java 線程總是在執行一個方法,這個方法被稱為當前方法,如果當前方法不是本地方法,PC 寄存器就會執行當前正在被執行的指令,如果是本地方法,則 PC 寄存器值為 undefined,寄存器存放如當前執行環境指標、程式計數器、操作棧指標、計算的變數指標等資訊。+ 虛擬機器最核心的組件就是執行引擎,他負責執行虛擬機器的位元組碼,一般會先進行編譯成機器碼後執行。 ### 堆、棧、方法區的概念和聯絡 堆解決的是資料存放區的問題,即資料怎麼放,放在哪 棧解決程式的運行問題,及程式如何執行,或者說如何處理資料 方法區是輔助堆棧的快永久區(Perm),解決堆棧資訊產生,是先決條件。 ![mark](http://oumk5fhgp.bkt.clouddn.com/blog/170813/DcFE6FE48m.png?imageslim) 類資訊存放在方法區, ### Java 堆 **Java 堆**是和 **Java 應用程式**關係最密切的記憶體空間,幾乎所有的對象都存放在其中,並且 Java 堆完全是自動化管理的,通過記憶體回收機制,垃圾對象會自動清理,不需要顯示的釋放。 根據記憶體回收機制的不同,Java 堆可能擁有不同的結構,最為常見的就是將整個堆分為 **新生代** 和 **老年代**。其中新生代存放新生的對象或者年齡不大的對象,老年代則存放老年對象。 新生代分為 eden 區、s0 區、s1 區,s0 和 s1 也被稱為 from 和 to 地區。他們是兩塊**大小相等**並且可以**互換的角色的空間**。 絕大多數的情況,對象**首先**分配在 **eden 區**,在一次新生代回收後,如果**對象還存活**,則會進入 **S0 區或者 S1 區**,之後沒經過一個新生代回收,如果對象存活則它的年齡就加1,當對象達到一定的年齡後,則進入老年代。 ![mark](http://oumk5fhgp.bkt.clouddn.com/blog/170813/m5kLdGdeIb.png?imageslim)   有很多垃圾收集器,GC。對於GC垃圾收集,對於新生代會頻繁的進行垃圾收集,對於老年代也會經曆回收, ### Java 棧 Java 棧是一塊**線程私人**的**記憶體空間**,一個棧,一般由三部分組成,局部變數表、運算元棧、幀資料區。 **局部變數表**:用於報錯函數的參數及局部變數 **運算元棧**:主要儲存計算過程的中間結果,同時作為計算過程中變數臨時的儲存空間。 **幀資料區**:除了局部變數表和運算元棧以外,棧還需要一些資料來支援常量池的解析,這裡幀資料區儲存著訪問常量池的指標,方便程式訪問常量池。另外,當函數返回或者出現異常時,虛擬機器必須有一個異常處理表,方便發送異常的時候找到異常的代碼,因此異常處理表也是幀資料區的一部分。 ### Java 方法區 Java 方法區和堆一樣,方法區是一塊所有**線程共用**的**記憶體地區**,他儲存系統的類資訊,比如類的欄位、方法、常量池等。方法區的大小決定了系統可以儲存多少個類,如果系統定義太多的類,導致方法區溢出,虛擬機器同樣會拋出記憶體溢出錯誤。方法區可以理解為永久區(Perm)。       通過根據垃圾收集的次數,來類比垃圾收集為新生代後台老年代 剛執行個體化、出事初始資料  eden s1 和 s0 也被稱為 from 和 to 地區,他們是兩塊大小相等並且可以相互轉化角色的空間   ## 堆、棧、方法區 ## 虛擬機器參數 ## 記憶體回收

JAVA 虛擬機器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.