java運行數據區域

依賴用戶線程的啓動和結束而創建和銷燬(線程私有):

html

  • --程序計數器(Program Counter Register)是一塊較小的內存空間,它的做用能夠看作是當前線程所執行的字節碼的行號指示器。
  • --虛擬機棧描述的是Java方法執行的內存模型:每一個方法被執行的時候都會同時建立一個棧幀(Stack Frame①)用於存儲局部變量表、操做棧、動態連接、方法出口等信息。每個方法被調用直至執行完成的過程,就對應着一個棧幀在虛擬機棧中從入棧到出棧的過程。 

         局部變量表存放編譯器可知的基本數據數據類型(boolean,byte,char int long double short float) 和對象引用java

  • --本地方法棧(Native Method Stacks)與虛擬機棧所發揮的做用是很是類似的,其區別不過是虛擬機棧爲虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則是爲虛擬機使用到的Native方法服務 (有的虛擬機如sun HotSpot 直接把本地方法棧和虛擬機棧合二爲一)


隨着虛擬機進程的啓動而存在(線程共享)算法

  • Java堆是被全部線程共享的一塊內存區域,在虛擬機啓動時建立。此內存區域的惟一目的就是存放對象實例,幾乎全部的對象實例都在這裏分配內存。 這一點在Java虛擬機規範中的描述是:全部的對象實例以及數組都要在堆上分配。 (從內存回收的角度看,因爲如今的收集器基本都是分代收集算法,因此java堆能夠細分爲新生代和老年代)
  • 方法區(Method Area)與Java堆同樣,是各個線程共享的內存區域,它用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。 (相對而言,垃圾收集行爲在這個區域比較少見,回收目標主要針對常量池的回收和對類的卸載)
  • 運行時常量池(Runtime Constant Pool)是方法區的一部分,用於存放編譯器生成的各類字面量和符號引用,他相對於class文件常量池的另一個重要特徵是具有動態性,這種特性被開發人員用的比較多的即是String類的intern方法 (在http://www.cnblogs.com/luluQQ/p/5153979.html 中有對String intern方法的詳細講解)
相關文章
相關標籤/搜索