1)寄存器. 這是很寬的存儲區,由於它位於不一樣於其餘存儲區的地方----處理器內部.可是寄存器的數量汲取有限,因此寄存器根據需求進行分配.你不能直接控制,也不能在程序中感受到寄存器的存在的任何跡象(另外一方面,c和c++容許您向編譯器建議寄存器的分配方式). java
2)堆棧. 位於通用RAM(隨機訪問存儲器)中,但經過堆棧指針能夠從處理器哪裏得到直接支持.堆棧若向下移動,則分配新的內存;若向上移動,則釋放那些內存.這是一種快速有效的分配存儲方法,僅次於寄存器.建立程序時,java系統必須知道存儲咋堆棧內全部項的確切的生命週期,以便上下移動堆棧指針.這一約束限制了程序的靈活性,因此雖然某些java數據存儲於堆棧中----特別是對象的引用,可是java對象並不存儲於其中. c++
3)堆. 一種通用的內存池(也位於RAM區),用於存放全部的java對象.堆不一樣於堆棧的好處是:編譯器不須要知道存儲的數據在堆裏存活多長時間.所以,在堆裏面分配存儲有很大的靈活性.當須要一個對象時,只須要用new寫一行簡單的代碼,當執行這行代碼時,會自動在堆裏面進行存儲分配,固然,這種靈活行必需要付出相應的代價:用堆進行存儲分配和清理可能比用堆棧進行存儲分配須要更多的時間(若是確實能夠在java中像在C++中同樣在棧中建立對象). 數據庫
4) 常量存儲. 常量值一般直接存放在程序代碼內部,這樣作是安全的,由於它們永遠不會被改變.有時,在嵌入式系統中,常量自己會和其餘部分隔離開,因此在這種狀況下,能夠選擇將其存放在ROM(只讀存儲器中). 安全
5)非RAM存儲. 若是數據徹底存活於程序以外,那麼它能夠不受程序的任何控制,在程序沒有運行時也能夠存在.其中兩個基本的例子是流對象和持久化對象.在流對象中,對象轉化成字節流,一般被髮送給另外一臺機器.在"持久化對象"中,對象被存放於磁盤上,所以,即便程序終止,他們仍能夠保持本身的狀態.這中存儲方式的技巧在於: 把對象轉化成能夠存放在其餘媒介上的事物.在須要時,能夠恢復成常規的,基於RAM的對象.java提供了對輕量級持久化的支持,而諸如JDBC和Hibernate這樣的機制提供了更加複雜的對在數據庫中存儲和讀取對象信息的支持. 指針