黑马程序员技术交流社区

标题: 成员变量和局部变量的内存分配问题 [打印本页]

作者: sk120110    时间: 2014-7-7 02:25
标题: 成员变量和局部变量的内存分配问题
我们老师讲的成员变量是分配在堆内存中,局部变量分配在栈内存中,可我的同学告诉我基本数据类型都分配在栈内存中,那成员变量如果是基本数据类型,应该分配到哪里?
作者: blue_sky    时间: 2014-7-7 11:11

stack(栈)是JVM的内存指令区。Java基本数据类型,Java指令代码,常量都保存在stack中。
heap(堆)是JVM的内存数据区。heap专门用来保存对象的实例。在heap中分配一定的内存来保存对象实例,实际上是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在stack中)。对象实例在heap中分配好以后,需要在stack中保存一个4字节的heap内存地址,用来定位该对象实例在heap中的位置,便于找到该对象实例。
类加载后,类中的不同属性的存放方式如下:
1)非静态method指令保存在stack中,方法内部变量中简单类型保存在stack中,对象类型在stack中保存地址,在heap中保存值.静态method指令与变量都放在stack中
2)对象实例包括其属性值作为数据,保存在数据区heap中。
3) 简单类型非静态属性放在heap中.
4) 静态属性是保存在stack中的(基本类型保存在stack中,对象类型地址保存在stack,值保存在heap中).
作者: luojunwei1992    时间: 2014-7-7 11:25
同意楼上意见
作者: 谭荣强    时间: 2014-7-7 13:14
成员变量是对象的属性,只看对象,不看数据类型




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2