java 存储空间_Java中的存储空间类型
在Thinking in java里,列舉了Java的六種存儲類型
1.寄存器
編寫過匯編程序的應(yīng)該對寄存器非常熟悉,那時候用的ax,bx,cx,dx等等。寄存器在CPU里面,所以速度特別快,但是數(shù)量非常有限。在java中無法直接和寄存器打交道,不過在c中是可以聲明寄存器變量的。
2.??臻g
寫過匯編的肯定感到非常親切,在匯編程序里不就是壓棧和出棧嗎?有一個指針控制??臻g,分配空間是棧指針上移,就是push操作,釋放空間指針下移,就是pop操作。當(dāng)然C和C++也主要是通過棧分配空間的。因?yàn)橹灰獕簵:统鰲?#xff0c;所以速度特別快。java中的對象引用是通過棧分配的,而java對象不是通過棧分配的,這也是java效率相對差一些的原因吧。通過棧分配空間有一個限制就是必須在編譯時確定空間大小,也就是程序運(yùn)行前就應(yīng)該可以知道運(yùn)行時內(nèi)存的情況。比如mov ax,4這條指令占用多少個字節(jié)在編譯時是確定的。
3.堆空間
就是一個大的內(nèi)存塊,需要的時候就申請分配,java中的對象都是在堆中非配的。但是堆空間的回收是比較麻煩的,所以JVM的回收算法都比較復(fù)雜。但是如果堆空間比較大,也就是內(nèi)存沒有面臨用完的話,JVM一般不會啟動垃圾回收器。這種情況下堆的效率和棧應(yīng)該差不多,只是堆沒有回收空間而已。如果要不時的啟動GC的話,可以想象效率會極其低下。
4.靜態(tài)存儲區(qū)
聲明為static的變量因?yàn)樗麄円恢贝嬖?整個程序運(yùn)行過程中),所以他們被保存在一個靜態(tài)存儲區(qū)。
5.常量儲存區(qū)
聲明為final static的為常量,可以保存在常量儲存區(qū),還有String類型的對象都是常量,系統(tǒng)維護(hù)了一個String常量池。
6.其他存儲
非RAM存儲器,主要就是磁帶,磁盤等等。
這里最關(guān)鍵的應(yīng)該是棧和堆,棧應(yīng)該是應(yīng)用最廣泛的,在匯編中函數(shù)調(diào)用的時候一般是這樣的過程:1.壓棧(保護(hù)現(xiàn)場)2.進(jìn)入方法調(diào)用3.出棧(恢復(fù)現(xiàn)場)這里只是簡單的描述,上面的過程可能會有好多嵌套,不過大致過程就是這樣,在其他語言其實(shí)也是一樣的。
總結(jié)
以上是生活随笔為你收集整理的java 存储空间_Java中的存储空间类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机顶盒刷机教程
- 下一篇: 数学之路(3)-机器学习(3)-机器学习