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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wupingtanlu 中级黑马   /  2012-5-12 22:41  /  1771 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对于一些如方法变量  和 成员变量  new的对象 以及静态变量,
  到底存到哪里是堆内存中还是栈内存中呢?
老是有点搞不清楚,还有那个方法内存区?
  请知道的各位,给解释一下!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
栈(heap)内存中存放基本类型,引用,局部变量;
堆(stack)内存中存放new出来的对象;
方法区(共享区,数据区)中存放静态变量,字符串常量,方法代码。方法区的代码被调用时,将在栈中开辟空间。运行完后,栈中的空间被释放。
回复 使用道具 举报
堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。
在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。
引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。
方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

通俗一点说,栈内存用来保存变量名,堆内存用来保存New出来的对象
楼主可以看看这个文章,很详细的http://beck5859509.iteye.com/blog/1002359

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 jiyixuan 于 2012-5-13 11:20 编辑

一般Java在内存分配时会涉及到以下区域:  

◆寄存器:我们在程序中无法控制
◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。
◆堆:存放用new产生的数据。
◆静态域:存放在对象中用static定义的静态成员,静态变量等。
◆常量池:存放常量,字符串常量。
◆非RAM存储:硬盘等永久存储空间

详细的内存分析请参考:一篇关于java内存分析的文章!http://blog.csdn.net/cz373095238/article/details/7521451


评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

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