黑马程序员技术交流社区
标题: 关于内存的问题? [打印本页]
作者: wupingtanlu 时间: 2012-5-12 22:41
标题: 关于内存的问题?
对于一些如方法变量 和 成员变量 new的对象 以及静态变量,
到底存到哪里是堆内存中还是栈内存中呢?
老是有点搞不清楚,还有那个方法内存区?
请知道的各位,给解释一下!
作者: 田林 时间: 2012-5-12 22:54
栈(heap)内存中存放基本类型,引用,局部变量;
堆(stack)内存中存放new出来的对象;
方法区(共享区,数据区)中存放静态变量,字符串常量,方法代码。方法区的代码被调用时,将在栈中开辟空间。运行完后,栈中的空间被释放。
作者: 于潇 时间: 2012-5-13 09:08
堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。
在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。
引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。
方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
通俗一点说,栈内存用来保存变量名,堆内存用来保存New出来的对象
楼主可以看看这个文章,很详细的http://beck5859509.iteye.com/blog/1002359
作者: 曾_强 时间: 2012-5-13 11:18
本帖最后由 jiyixuan 于 2012-5-13 11:20 编辑
一般Java在内存分配时会涉及到以下区域:
◆寄存器:我们在程序中无法控制
◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。
◆堆:存放用new产生的数据。
◆静态域:存放在对象中用static定义的静态成员,静态变量等。
◆常量池:存放常量,字符串常量。
◆非RAM存储:硬盘等永久存储空间
详细的内存分析请参考:一篇关于java内存分析的文章!http://blog.csdn.net/cz373095238/article/details/7521451
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |