日期:2014-05-20  浏览次数:21322 次

一个简单的问题:new出来的对象,对象属性放在JVM的堆中,还是栈中?
比如

new person(12);

person有个int 属性 age;

这时候这个person按说是放在堆中的,那么,这个age是放在哪呢?

------解决方案--------------------
从Person类定义来看,Person对象包括了一个属性age,而属性是需要内存来存储的,Person对象由多块内存来组成,不同的内存块存储了Person对象的不同属性。
换句话说,在你创造Person对象的时候堆空间会分配一块内存,而这一块内存又由多块小内存组成,Person对象的不同属性就被存储在这些不同的小内存块中。
------解决方案--------------------
new出来的是放堆里
------解决方案--------------------
JVM中, 所有对象都是在堆中分配内存空间的,
栈只用于保存局部变量和临时变量,如果是对象,只保存引用,实际内存还是在堆中;

一个java对象占用的内存空间,除了一个固定大小的空间用于描述这个对象属于哪个类,其它的就用于保存它的字段的值;

------解决方案--------------------
new出来的 不管什么 都放在对中。你可以把new出来的对象想象成堆里的一个大房子,而age呢,就住在那个大房子里。
------解决方案--------------------
age是person的一部分,应该放哪里?

人在屋里,那这个人的胳膊在哪里?

一般说对象是分配在堆里的,不过对jvm而言,由于可能使用标量替换之类的优化技术,可能根本不会在堆中创建对象。
------解决方案--------------------
放在内存中^_^.
------解决方案--------------------
放在堆中,或者放在栈中对你有什么影响么?
------解决方案--------------------
new 对象都是放在堆中的
------解决方案--------------------
探讨
JVM中, 所有对象都是在堆中分配内存空间的,
栈只用于保存局部变量和临时变量,如果是对象,只保存引用,实际内存还是在堆中;

一个java对象占用的内存空间,除了一个固定大小的空间用于描述这个对象属于哪个类,其它的就用于保存它的字段的值;

------解决方案--------------------
如果想知道 去看看 深入JAVA虚拟机
------解决方案--------------------
应该是堆吧。。。只有基本数据类型才放在栈里的,比如int double。。。
------解决方案--------------------
new 出来的对象都是放在堆中的
------解决方案--------------------
堆堆堆
------解决方案--------------------
探讨

应该是堆吧。。。只有基本数据类型才放在栈里的,比如int double。。。

------解决方案--------------------
学习了。
------解决方案--------------------
new 出来的是放在堆里的。
------解决方案--------------------
是这样的,举个例子吧, String myString = new String() ;
myString放在堆里面 ,而实际的开辟的变量的空间放在栈里面

------解决方案--------------------
当然是堆里面咯~ 你这个int类型是一个成员变量,他是属于你这个new出来的对象中的一个成员。
而你的对象在堆区,成员变量便在你这个对象所在的那块内存区域里面!
 
------解决方案--------------------
探讨
引用:

应该是堆吧。。。只有基本数据类型才放在栈里的,比如int double。。。

还有reference

------解决方案--------------------
我也是初学的,我学的时候关于内存方面很迷惑,后来看了尚学堂的JAVA视频,就明白了,建议你看看