Stack 和Heap的差別,上次華為研究生筆試題就考過。C語言的我很清楚:
?Stack: automatic variables within functions
? Heap: global variables (storage class external), and static variables
簡而言之,最大的不同是:前者是函數(shù)變量的空間,后者是程序變量的空間
另外,Stack上分配內(nèi)存是安全的。而Heap上分配內(nèi)存則沒那么爽了。調(diào)用malloc分配內(nèi)存,是在Heap上開辟空間。一定要注意釋放。否則老是memory leak
?
昨天有人問我JVM中的Stack和Heap的差別,當(dāng)時(shí)心不在焉地照搬C語言敷衍了事。
中午起床,沒事閑著看帖子。無意中想起這個(gè)問題,在Google搜索了一番。發(fā)現(xiàn)昨天的回答出了問題:
“?It is useful to know that these two different kinds of memory exist in Java. Stack memory is the program's memory, and heap memory resides outside of the program.”
Stack是程序內(nèi)存,Heap內(nèi)存存在于程序之外。這樣子看起來和C語言中地Heap有些像誒(C語言中的Heap也是在mian()之外的)。再仔細(xì)看看
Stack memory stores primitive types and the addresses of objects. The object values are stored in heap memory.
類實(shí)例存在于Heap。類實(shí)例的的指針在Stack中存放。難怪JVM沒有text segment ,在Stack就囊括了text segment。
這樣做的好處,就是為了實(shí)現(xiàn)Java的垃圾回收機(jī)制。任何的類對象實(shí)例都在Heap中,在Stack中有它們的引用。當(dāng)所以的線程都不在需要某個(gè)引用時(shí),JVM的那個(gè)資源回收線程就會把該實(shí)例從Heap當(dāng)中清楚掉。
文章告訴我,回收線程要做全局的檢測來確定某個(gè)實(shí)例是否已經(jīng)“無用”了。這樣子,我們可以在代碼上做些工作,來給回收線程加速。
Test t = new Test();
?t.someAction();
?// all done
?t = null;
實(shí)例t不再有用時(shí),就把他置為null,告訴JVM:你不用在Stack和Heap之間自己校驗(yàn)啦,我已經(jīng)做好了標(biāo)記,放心回收吧。
小結(jié):Stack: Primitive data types(primitive types), the addresses of objects(=references).
??????????????????????? Heap:? objects.
前者:基本類型和實(shí)例地址(引用),后者:類實(shí)例
FeedBack:
2006-10-11 17:38 | QQ:199976057
只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關(guān)文章:
|
||
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 1 | |||
2 | 3 | 4 | 5 | 6 | 7 | 8 | |||
9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
16 | 17 | 18 | 19 | 20 | 21 | 22 | |||
23 | 24 | 25 | 26 | 27 | 28 | 29 | |||
30 | 31 | 1 | 2 | 3 | 4 | 5 |
如果真的給你一片天,你敢不敢要?
常用鏈接
留言簿(3)
隨筆分類
隨筆檔案
- 2007年6月 (3)
- 2007年1月 (1)
- 2006年11月 (1)
- 2006年10月 (6)
- 2006年9月 (1)
- 2006年8月 (2)
- 2006年7月 (8)
- 2006年6月 (1)
- 2006年5月 (3)
- 2006年4月 (4)
相冊
搜索
最新評論

- 1.?re: 一點(diǎn)小感想:為什么那么多人說Java慢???[未登錄]
- 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
- --夏
- 2.?re: 一點(diǎn)小感想:為什么那么多人說Java慢???[未登錄]
-
莫名被最后一句話戳中笑點(diǎn)@fjchenq
- --aa
- 3.?re: 一點(diǎn)小感想:為什么那么多人說Java慢???
- 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
- --嗷嗷嗷
- 4.?re: 一點(diǎn)小感想:為什么那么多人說Java慢???[未登錄]
- c++存在一個(gè)函數(shù)表,訪問一段代碼至少要訪問兩次內(nèi)存,所以在對性能要求很高的操作系統(tǒng)內(nèi)核上不適宜使用
- --光光
- 5.?re: 一點(diǎn)小感想:為什么那么多人說Java慢???
- Java桌面應(yīng)用慢到死!垃圾一樣的東西
- --的