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

java中的堆内存和栈内存

阅读更多

栈(stack):

     是一个后进先出的数据结构,通常用于保存方法(函数)中的参数,局部变量. 在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).

     栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的。所以栈内存中存放的都是方法运行中声明的基本数据类型,如short,int,long等,他们的长度都是一定的,并且生存期都是随着方法的结束而结束。

堆(heap):

      堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢,C中的malloc语句所产生的内存空间就在堆中. 在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象.所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用.堆内存中数据的生存期是由java的回收机制确定的,当栈中没有引用指向堆中的内存的时候,内存就会被回收。

3
1
分享到:
评论
5 楼 linmomo02 2012-03-21  
mfkvfn 写道
“先进后出”听说很别扭,一般不是称“后进先出”吗?

嗯。也是,虽然是一个意思但后面的那个说法好像更专业一些。
4 楼 mfkvfn 2012-03-21  
“先进后出”听说很别扭,一般不是称“后进先出”吗?
3 楼 lvjun106 2012-03-20  
http://lvjun106.iteye.com/blog/1451866
参考看一看吧。
2 楼 linmomo02 2012-03-20  
lvjun106 写道
当栈中没有引用指向堆中的内存的时候,内存就会被回收。

应该是当栈中没有引用指向堆中的内存的时候,内存就会被回收。

小弟菜鸟,弱弱的问一下老大,何谓强引用
1 楼 lvjun106 2012-03-20  
当栈中没有引用指向堆中的内存的时候,内存就会被回收。

应该是当栈中没有引用指向堆中的内存的时候,内存就会被回收。

相关推荐

Global site tag (gtag.js) - Google Analytics