JVM內存模型概述

1、虛擬機內存模型數組

 

  一、線程私有的數據區線程

    線程私有的數據區包括程序計數器、虛擬機棧和本地方法棧三個區域,對象

    a.程序計數器blog

      當線程數超過CPU數量或CPU內核數量時,線程之間就要根據時間片就要根據時間片輪詢搶奪cpu時間資源,所以 爲了線程切換後能恢復到正確執行位置,每條線程都須要獨立的計數器去記錄其正在執行的字節碼指令地址。程序計數器是線程私有的一塊較小的內存空間,其能夠看作是當前線程所執行的字節碼的行號指示器,若是線程正在執行的是Java方法,計數器記錄的是正在執行的字節碼指令的地址;若是正在執行的是Native方法,則計數器的值爲空。程序計數器是惟一一個沒有規定任何OutOfMenoryError的區域接口

    b.虛擬機棧內存

      擬機棧的描述的是Java方法執行的內存模型,是線程私有的。每一個方法在執行的時候都會建立一個棧楨,用於存儲局部變量表,操做數棧,動態連接,方法出口等信息,並且每一個方法從調用到直至完成的過程,對應一個棧楨在虛擬機棧中入棧出棧的過程,其中,局部變量表主要存放一些基本類型的變量,和對象句柄,它們可使方法參數,也能夠是方法的局部變量。虛擬機棧有兩種異常狀況:StackOverflowError和OutofMemoryError,資源

     c.本地方法棧編譯器

        本地方法棧與Java虛擬機棧很是類似,也是線程私有的,區別是虛擬機棧爲虛擬機執行Java方法服務,而本地方法棧爲虛擬機執行的Native方法服務(一個Native Method就是一個Java調用非Java代碼的接口,一個Native Method是這樣一個Java的方法:該方法的實現是由非Java語言實現的,例如 c虛擬機

  2、線程共享的數據區編譯

    線程共享的數據區具體包括Java堆和方法區兩個區域,

     a、Java堆

        Java堆的惟一目的就是存放對象實例,幾乎全部的對象實例(和數組)都在這裏分配內存。Java堆是線程共享的,類對象從中分配空間,這些對象經過new、newarray、anewarray和multianewarray等指令創建,它們不須要程序代碼來顯示的釋放。Java堆的目的就是用來存放對象實例的,所以其也是垃圾收集器管理的主要區域,故也稱爲GC堆。

     b、方法區

        方法區和Java堆同樣,也是線程共享的而且不須要連續的內存,其用於存儲已被虛擬機加載的類信息,常量、靜態變量、即時編譯器編譯後的代碼等數據。

        (1)、運行時常量池,

          運行時常量池是方法區的一部分,用於存放編譯期生成的各類字面量和符號引用。類和接口的全限定名、字段的名稱和描述符和方法的名稱和描述符。

相關文章
相關標籤/搜索