JAVA運行時數據區域

  
   JAVA運行時數據區域分爲:①、方法區(Method Area);②、虛擬機棧(VM Stack);③、本地方法棧(Native Method Stack);④、堆(Heap);⑤、程序計數器(Program Counter Register);
     其中,虛擬機棧、本地方法棧、程序計數器是線程隔離的數據區,方法去和堆是由所有線程共享的數據區
     
     ①、方法區:用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。Java虛擬機把方法區描述爲堆的一個邏輯部分,但它的另一別名是Non-Heap,目的是與Java堆區分開來。        
            運行時常量池是方法區的一部分,Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息是常量池(Constant Pool Table),用於存放編譯期生成的各種字面量和符號引用,這部分內容在類加載後進入方法區的運行時常量池中存放。
 
     ②、虛擬機棧:虛擬機棧是線程私有的,它的生命週期與線程的相同。虛擬機棧描述的是Java方法執行的內存模型:每個方法在執行時都會創建一個棧幀(Stack Frame),用於存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。一個方法從調用到執行完成,就對應一個棧幀在虛擬機棧中從入棧到出棧。
           局部變量表存放了編譯期可知的各種基本數據類型(boolean、byte、char、short、int、long、float、double)、對象引用(reference類型,注意,它不等同於對象本身,可能是一個指向對象起始地址的指針,也可能是指向一個代表此對象的句柄或者其他與此對象相關的位置)和returnAddress類型(指向了一條字節碼指令地址)

     ③、本地方法棧:與虛擬機棧很相似,只不過虛擬機棧是爲虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧是爲虛擬機使用到的Native方法服務。

     ④、堆:堆是Java虛擬機所管理的內存中最大的一塊。是被所有線程共享的一個內存區域,在虛擬機啓動時創建。唯一目的就是存放對象實例,幾乎所有的對象都在這裏分配內存。Java堆是垃圾收集器管理的主要區域,因此很多時候堆也被稱作“GC堆”。

     ⑤、程序計數器:是一塊較小的內存空間,可以看作是當前線程所執行的字節碼的行號指示器。在虛擬機的概念模型裏,字節碼解釋器工作時就是通過改變這個計數器的值來選擇下一條需要執行的字節碼指令。每一個線程都有一個程序計數器,互不干擾。
發佈了36 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章