JVM的內(nèi)存區(qū)域結(jié)構(gòu)如下

內(nèi)存區(qū)域大概可分為方法區(qū),堆,虛擬機(jī)棧,本地方法棧,程序計(jì)數(shù)器,還會(huì)有直接內(nèi)存(虛擬機(jī)對內(nèi)存之外,但屬于及其內(nèi)存的一塊區(qū)域)
上述中虛擬機(jī)棧,本地方法棧,程序計(jì)數(shù)器是線程私有的
程序計(jì)數(shù)器:
例如有A,B兩個(gè)線程,兩個(gè)線程需要自己記錄具體執(zhí)行到哪一行代碼,這條代碼執(zhí)行完了,需要使用程序計(jì)數(shù)器指向下一條需要執(zhí)行的代碼。有了程序計(jì)數(shù)器,兩個(gè)線程就知道自己應(yīng)該做什么,以及下一步應(yīng)該做什么,不會(huì)互相影響。
虛擬機(jī)棧:
線程在執(zhí)行的過程不可避免要在方法之間跳轉(zhuǎn),虛擬機(jī)棧就是用來記錄線程需要執(zhí)行那些方法。
虛擬機(jī)棧是由棧幀組成的,一個(gè)棧幀對應(yīng)一個(gè)方法調(diào)用,一個(gè)方法調(diào)用完就會(huì)從虛擬機(jī)棧中出棧

跟程序計(jì)數(shù)器的道理是一樣的,虛擬機(jī)棧會(huì)決定線程自己的方法調(diào)用路徑。
本地方法棧:
跟虛擬機(jī)棧差不多,只不過本地方法棧的作用對象是native方法