java方面,我想问问堆内存与栈内存的原理、区别、相关事实。到底是怎么一回事?

 我来答
粕誓茄歉昂步9b
2010-08-25 · TA获得超过493个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:229万
展开全部
程序内存的动态改变部分可以分成两个区:
堆栈(stack):内存总是向一个方向增加或向相反方向减少,这个内存区用于存放方法或块中声明的局部变量。遇到局部变量声明时(包括调用方法中的变元变量-通C中的形参)内存增长,退出方法或块时这些变量弹出堆栈。
堆(heap):用于存储对象,对象的引用放在堆栈区,但是对象的数据区必须存放在堆中。堆是内存单元构成的一个巨大的表。New语句生成新对象时,保留的小块内存单元随时进行分配,一个内存单元块不再被现有变量引用时,这些不用的单元被释放和收集起来。

堆内存存放的有:String、基本数据类型、对象引用、static静态代码块等
栈内存存放的有:StringBuffer、对象等

希望对你有所帮助!
拿破仑哈哈
2013-01-07 · TA获得超过136个赞
知道小有建树答主
回答量:69
采纳率:0%
帮助的人:45.2万
展开全部
jvm的内存结构不仅仅是划分堆和栈这两个部分,这种划分是非常粗糙的,大体上可分为:方法区、堆、虚拟机栈、本地栈以及程序计数器,其中你也可以把方法区理解成堆的一部分。
堆栈(虚拟机栈):存储方法执行过程中产生的局部变量,基本类型数据直接保存在栈中,对象类型保存引用;
堆:保存object对象;
方法区:java对象类型(class)加载后保存到该区域,包含class的各种描述信息,当然类的方法体也保存在此区域,除了class外,class的静态变量也保存此区域(其实在方法区内部又划分出一块叫常量池的区域);
---------楼上哥们的回答一半是错误的,详细分析建议看一下《深入理解JVM》
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式