方法區(qū)和對(duì)是所有線程共享的內(nèi)存區(qū)域包晰;
而java棧、本地方法棧和程序員計(jì)數(shù)器是運(yùn)行是線程私有的內(nèi)存區(qū)域辅髓。
程序計(jì)數(shù)器(Program Counter Register)是一塊較小的內(nèi)存空間浪感,它的作用可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示
此內(nèi)存區(qū)域是唯一一個(gè)在Java虛擬機(jī)規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域
虛擬機(jī)棧(java stack)描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法被執(zhí)行的時(shí)候都會(huì)同時(shí)創(chuàng)建一個(gè)棧幀(Stack Frame)用于存儲(chǔ)局部變量表、操作棧伊群、動(dòng)態(tài)鏈接考杉、方法出口等信息。每一個(gè)方法被調(diào)用直至執(zhí)行完成的過程在岂,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過程奔则。
局部變量表存放了編譯期可知的各種基本數(shù)據(jù)類型(boolean、byte蔽午、char易茬、short、int及老、float抽莱、long、double)骄恶、對(duì)象引用(reference類型食铐,它不等同于對(duì)象本身,根據(jù)不同的虛擬機(jī)實(shí)現(xiàn)僧鲁,它可能是一個(gè)指向?qū)ο笃鹗嫉刂返囊弥羔樑吧耄部赡苤赶蛞粋€(gè)代表對(duì)象的句柄或者其他與此對(duì)象相關(guān)的位置)和returnAddress類型(指向了一條字節(jié)碼指令的地址)。
本地方法棧
和虛擬機(jī)棧類似寞秃,不過執(zhí)行的是本地方法
方法區(qū)(Method Area)與Java堆一樣斟叼,是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲(chǔ)已被虛擬機(jī)加載的類信息春寿、常量朗涩、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)绑改。雖然Java虛擬機(jī)規(guī)范把方法區(qū)描述為堆的一個(gè)邏輯部分谢床,但是它卻有一個(gè)別名叫做Non-Heap(非堆),目的應(yīng)該是與Java堆區(qū)分開來厘线。