JAVA把存儲器分為5種:
1.寄存器Register
2.棧Stack:棧在RAM中,CPU可通過棧指針直接訪問數(shù)據(jù),棧指針向上則建立新的存儲區(qū),向下則釋放存儲區(qū)。棧中的數(shù)據(jù)必須有確切的大小和生命期(什么時候建立數(shù)據(jù),什么時候撤消數(shù)據(jù)),不然指針如何知道該移動多少呢?通常對象的引用放在棧中,但是對象本身不在這里。由于棧在RAM中,因此速度比寄存器慢?;緮?shù)據(jù)類型也在棧中,因為其大小和生命期是確定的。
3.堆Heap:堆在RAM中,JAVA對象就放在這里。堆的好處是其中的數(shù)據(jù)的大小和生命期都可以不確定。每當(dāng)用new關(guān)鍵字創(chuàng)建對象時,編譯程序就會在堆中分配響應(yīng)的存儲區(qū)給對象。
4.靜態(tài)存儲區(qū)Static:靜態(tài)存儲區(qū)也在RAM中,看到Static,就可以猜測,那些加在static關(guān)鍵字的數(shù)據(jù)和方法都放在這里,確實這樣。不過對象即便是靜態(tài)的也不放在這兒。
5.常量存儲區(qū)Constant:常量存儲區(qū)在RAM中,與靜態(tài)存儲區(qū)類似,程序中的常量(由final關(guān)鍵字修飾)都放在這里。