java方面,我想问问堆内存与栈内存的原理、区别、相关事实。到底是怎么一回事?
2个回答
展开全部
程序内存的动态改变部分可以分成两个区:
堆栈(stack):内存总是向一个方向增加或向相反方向减少,这个内存区用于存放方法或块中声明的局部变量。遇到局部变量声明时(包括调用方法中的变元变量-通C中的形参)内存增长,退出方法或块时这些变量弹出堆栈。
堆(heap):用于存储对象,对象的引用放在堆栈区,但是对象的数据区必须存放在堆中。堆是内存单元构成的一个巨大的表。New语句生成新对象时,保留的小块内存单元随时进行分配,一个内存单元块不再被现有变量引用时,这些不用的单元被释放和收集起来。
堆内存存放的有:String、基本数据类型、对象引用、static静态代码块等
栈内存存放的有:StringBuffer、对象等
希望对你有所帮助!
堆栈(stack):内存总是向一个方向增加或向相反方向减少,这个内存区用于存放方法或块中声明的局部变量。遇到局部变量声明时(包括调用方法中的变元变量-通C中的形参)内存增长,退出方法或块时这些变量弹出堆栈。
堆(heap):用于存储对象,对象的引用放在堆栈区,但是对象的数据区必须存放在堆中。堆是内存单元构成的一个巨大的表。New语句生成新对象时,保留的小块内存单元随时进行分配,一个内存单元块不再被现有变量引用时,这些不用的单元被释放和收集起来。
堆内存存放的有:String、基本数据类型、对象引用、static静态代码块等
栈内存存放的有:StringBuffer、对象等
希望对你有所帮助!
展开全部
jvm的内存结构不仅仅是划分堆和栈这两个部分,这种划分是非常粗糙的,大体上可分为:方法区、堆、虚拟机栈、本地栈以及程序计数器,其中你也可以把方法区理解成堆的一部分。
堆栈(虚拟机栈):存储方法执行过程中产生的局部变量,基本类型数据直接保存在栈中,对象类型保存引用;
堆:保存object对象;
方法区:java对象类型(class)加载后保存到该区域,包含class的各种描述信息,当然类的方法体也保存在此区域,除了class外,class的静态变量也保存此区域(其实在方法区内部又划分出一块叫常量池的区域);
---------楼上哥们的回答一半是错误的,详细分析建议看一下《深入理解JVM》
堆栈(虚拟机栈):存储方法执行过程中产生的局部变量,基本类型数据直接保存在栈中,对象类型保存引用;
堆:保存object对象;
方法区:java对象类型(class)加载后保存到该区域,包含class的各种描述信息,当然类的方法体也保存在此区域,除了class外,class的静态变量也保存此区域(其实在方法区内部又划分出一块叫常量池的区域);
---------楼上哥们的回答一半是错误的,详细分析建议看一下《深入理解JVM》
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询