JVM中的記憶體分為五個部分:
(1)方法區:儲存載入的class位元組碼,透過該區域我們能定址到類中的方法的入口。除此之外,方法區還包括執行時常量區和靜態常量區。這個區域是所有執行緒共享的。
(2)堆:儲存new出來的物件,垃圾回收器主要監控和回收的就是這塊區域。在堆裡面不斷建立物件但是垃圾回收器不回收,就有可能造成OutOfMemoryError錯誤。這個區域也是執行緒共享的。
(3)虛擬機器棧:儲存所有被呼叫的java方法的上下文。在main方法裡面呼叫test方法,則在虛擬機器棧裡面push進test方法上下文,呼叫完畢,則pop出test方法的上下文。倘若在main方法裡面遞迴呼叫main方法,則虛擬機器棧則會被消耗光資源,造成StackOverflowError錯誤。這個區域是執行緒隔離的,也就是說每個執行緒都有一個虛擬機器棧。
(4)本地方法棧:本地方法棧與虛擬機器棧類似,只不過本地方法棧中儲存所有被呼叫的本地native方法的上下文。這個區域也是執行緒隔離的。
(5)程式計數器:儲存著CPU下一條指令的地址,也就是說記錄著現在程式執行到了哪裡,執行到了那條語句,哪個指令。這個區域也是執行緒隔離的。
JVM中的記憶體分為五個部分:
(1)方法區:儲存載入的class位元組碼,透過該區域我們能定址到類中的方法的入口。除此之外,方法區還包括執行時常量區和靜態常量區。這個區域是所有執行緒共享的。
(2)堆:儲存new出來的物件,垃圾回收器主要監控和回收的就是這塊區域。在堆裡面不斷建立物件但是垃圾回收器不回收,就有可能造成OutOfMemoryError錯誤。這個區域也是執行緒共享的。
(3)虛擬機器棧:儲存所有被呼叫的java方法的上下文。在main方法裡面呼叫test方法,則在虛擬機器棧裡面push進test方法上下文,呼叫完畢,則pop出test方法的上下文。倘若在main方法裡面遞迴呼叫main方法,則虛擬機器棧則會被消耗光資源,造成StackOverflowError錯誤。這個區域是執行緒隔離的,也就是說每個執行緒都有一個虛擬機器棧。
(4)本地方法棧:本地方法棧與虛擬機器棧類似,只不過本地方法棧中儲存所有被呼叫的本地native方法的上下文。這個區域也是執行緒隔離的。
(5)程式計數器:儲存著CPU下一條指令的地址,也就是說記錄著現在程式執行到了哪裡,執行到了那條語句,哪個指令。這個區域也是執行緒隔離的。