`
huangchao200701
  • 浏览: 58760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 堆与栈

阅读更多
堆和栈的主要的区别由以下几点: 
          1、管理方式不同; 
          2、空间大小不同; 
          3、能否产生碎片不同; 
4、生长方向不同; 
          5、分配方式不同; 
          6、分配效率不同; 
    管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。
 
   空间大小:一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的,例如,在VC6下面,默认的栈空间大小是1M(好像是,记不清楚了)。当然,我们可以修改:         
打开工程,依次操作菜单如下:Project->Setting->Link,在Category   中选中Output,然后在Reserve中设定堆栈的最大值和commit。 
注意:reserve最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较大会使栈开辟较大的值,可能增加内存的开销和启动时间。

   碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出,在他弹出之前,在他上面的后进的栈内容已经被弹出,详细的可以参考数据结构,这里我们就不再一一讨论了。  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics