A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 奋斗的小胖子 中级黑马   /  2014-2-27 17:11  /  1093 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看笔记突然发现两个自相矛盾的话。
一句话:局部变量存在,堆的方法里。
一句话:栈存储方法以及方法的执行区。
这个谁能跟我说说。这个栈跟堆的区别。顺便告诉这上面两句话谁对谁错啊。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
这个问题我个人建议初学者不要太过于用心在这上面,真正搞懂是需要深入了解java虚拟机的。简单的说下吧,局部变量存储在栈里,非静态成员变量存储在堆里,静态成员变量存储在方法去里面,个人认为初学者先了解下java虚拟机的内存结构有哪几部分,再吧变量的的存储位置对应上,先记住就可以了。以后熟悉了可以去看看深入了解java虚拟机这本书。现在研究的太深浪费时间。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
一、栈是方法的执行区。当某个方法被调用时,该方法就进栈了。例如当虚拟机调用主函数时,我们就说主函数进栈了。主函数中的变量(即局部变量)都在栈这片内存中开辟空间。其他一般函数也是这样。
所以,我觉得你说那两句话应该是这样:1、栈是方法的执行区,方法区存储方法,至于本地方法区还没学到不了解。2、局部变量存在于栈内存中,随着所属区域运行而存在,结束而释放。
二、这个是毕老师总结的:
java分了5片内存。
1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
      只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象,也就是实体。啥是实体啊?就是用于封装多个数据的。
1:每一个实体都有内存首地址值。
2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
3:垃圾回收机制。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马