[TOC]
內(nèi)存劃分
程序計數(shù)器
如果線程正在執(zhí)行的是一個Java方法激才,這個計數(shù)器記錄的是正在執(zhí)行的虛擬機字節(jié)碼指令的地 址;如果正在執(zhí)行的是本地(Native)方法,這個計數(shù)器值則應(yīng)為空(U ndefined)
Java虛擬機棧
局部變量表存放了編譯期可知的各種Java虛擬機基本數(shù)據(jù)類型(boolean、byte日矫、char般婆、short已卷、int弧哎、 float雁比、long、double)撤嫩、對象引用(reference類型偎捎,它并不等同于對象本身)
本地方法棧
本地方法棧(Native M ethod Stacks)與虛擬機棧所發(fā)揮的作用是非常相似的,其區(qū)別只是虛擬機 棧為虛擬機執(zhí)行Java方法(也就是字節(jié)碼)服務(wù)序攘,而本地方法棧則是為虛擬機使用到的本地(Native) 方法服務(wù)茴她。
堆
此內(nèi)存區(qū)域的唯一目的就是存放對象實例,Java 世界里“幾乎”所有的對象實例都在這里分配內(nèi)存程奠。
方法區(qū)
它用于存儲已被虛擬機加載 的類型信息丈牢、常量、靜態(tài)變量瞄沙、即時編譯器編譯后的代碼緩存等數(shù)據(jù)
這區(qū)域也有垃圾回收動作,回收目標主要是針對常量池的回收和對類型的卸載
-
運行時常量池
運行時常量池(Runtime Constant Pool)是方法區(qū)的一部分,用于存放編譯期生 成的各種字面量與符號引用赡麦,這部分內(nèi)容將在類加載后存放到方法區(qū)的運行時常量池中
直接內(nèi)存
在JDK 1.4中新加入了NIO(New Input/Output)類,引入了一種基于通道(Channel)與緩沖區(qū) (Buffer)的I/O方式帕识,它可以使用Nat ive函數(shù)庫直接分配堆外內(nèi)存泛粹,然后通過一個存儲在Java堆里面的 DirectByteBuffer對象作為這塊內(nèi)存的引用進行操作。這樣能在一些場景中顯著提高性能肮疗,因為避免了 在J ava堆和N at ive堆中來回復(fù)制數(shù)據(jù)晶姊。