posts - 30,  comments - 28,  trackbacks - 0

Stack 和Heap的差别,上次华为研究生笔试题就考过。C语言的我很清楚:
 Stack: automatic variables within functions
  Heap: global variables (storage class external), and static variables

简而言之,最大的不同是:前者是函数变量的空间,后者是程序变量的空间

另外,Stack上分配内存是安全的。而Heap上分配内存则没那么爽了。调用malloc分配内存,是在Heap上开辟空间。一定要注意释放。否则老是memory leak
 
昨天有人问我JVM中的Stack和Heap的差别,当时心不在焉地照搬C语言敷衍了事。
中午起床,没事闲着看帖子。无意中想起这个问题,在Google搜索了一番。发现昨天的回答出了问题:
“ 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是程序内存,Heap内存存在于程序之外。这样子看起来和C语言中地Heap有些像诶(C语言中的Heap也是在mian()之外的)。再仔细看看

Stack memory stores primitive types and the addresses of objects. The object values are stored in heap memory.

类实例存在于Heap。类实例的的指针在Stack中存放。难怪JVM没有text segment ,在Stack就囊括了text segment

这样做的好处,就是为了实现Java的垃圾回收机制。任何的类对象实例都在Heap中,在Stack中有它们的引用。当所以的线程都不在需要某个引用时,JVM的那个资源回收线程就会把该实例从Heap当中清楚掉。

文章告诉我,回收线程要做全局的检测来确定某个实例是否已经“无用”了。这样子,我们可以在代码上做些工作,来给回收线程加速。
Test t = new Test();
 t.someAction();
 // all done
 t = null;
实例t不再有用时,就把他置为null,告诉JVM:你不用在Stack和Heap之间自己校验啦,我已经做好了标记,放心回收吧。

小结:Stack: Primitive data types(primitive types), the addresses of objects(=references).
                        Heap:  objects.
前者:基本类型和实例地址(引用),后者:类实例

posted on 2006-07-31 16:28 murainwood 阅读(737) 评论(2)  编辑  收藏 所属分类: Java读书笔记


FeedBack:
# re: Stack and Heap
2006-08-01 11:17 | 小文
你写的东东不错
蛮有意思的  回复  更多评论
  
# re: Stack and Heap
2006-10-11 17:38 | QQ:199976057
深入潜出,不错!!有空交流一下
有个问题就是text segment该怎么理解呢
我的QQ199976057  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

如果真的给你一片天,你敢不敢要?

常用链接

留言簿(3)

随笔分类

随笔档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜