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

jwx0925 2010-10-21 10:26:32
比如

new person(12);

person有个int 属性 age;

这时候这个person按说是放在堆中的,那么,这个age是放在哪呢?
...全文
1513 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
逍遥兮容与 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

age是person的一部分,应该放哪里?

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

一般说对象是分配在堆里的,不过对jvm而言,由于可能使用标量替换之类的优化技术,可能根本不会在堆中创建对象。
[/Quote]
那么如果类里有一个数组属性,这个类中放的是数组的引用(即数组放在堆的其他地方!),还是数组?
hayuanjunbudilei 2010-10-27
  • 打赏
  • 举报
回复 1
age这个属性放在堆中,在栈中会存放你这个person对象的引用,该引用使用一个指针从栈内存中指向堆内存。
hzygbicc 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thefirstz 的回复:]
new出来的是放堆里
[/Quote]
我觉得就像它说的
yymn_love 2010-10-27
  • 打赏
  • 举报
回复
new Person();
new出来的对象放在堆里的,堆里一块内存存放该对象。该块内存又分为一块块存放该对象的所有属性,不管是引用型的还是基本类型。所以 int age 是在堆中的
桐桐-Dragon 2010-10-27
  • 打赏
  • 举报
回复
new出来的应该是在堆中,前几天看书看到的。。。
未来纪元 2010-10-27
  • 打赏
  • 举报
回复
如果属性不是static的,
Person per=new Person(12);per在栈中,new Person(12)在堆中,new Person(12)的地址赋给per,per指向new Person(12),而age属性也在new Person(12)所对应的堆内存中
如果属性是static的,
Person per=new Person(12);per在栈中,new Person(12)在堆中,new Person(12)的地址赋给per,per指向new Person(12),但age属性是static的存放在datasegment数据区这个内存区,所有的对象共用static属性
  • 打赏
  • 举报
回复
当然是堆里面咯~ 你这个int类型是一个成员变量,他是属于你这个new出来的对象中的一个成员。
而你的对象在堆区,成员变量便在你这个对象所在的那块内存区域里面!
ZhengNanSoft 2010-10-24
  • 打赏
  • 举报
回复
是这样的,举个例子吧, String myString = new String() ;
myString放在堆里面 ,而实际的开辟的变量的空间放在栈里面
lyc89757 2010-10-24
  • 打赏
  • 举报
回复
new 出来的是放在堆里的。
renjianguokeivor 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 houjin_cn 的回复:]
JVM中, 所有对象都是在堆中分配内存空间的,
栈只用于保存局部变量和临时变量,如果是对象,只保存引用,实际内存还是在堆中;

一个java对象占用的内存空间,除了一个固定大小的空间用于描述这个对象属于哪个类,其它的就用于保存它的字段的值;
[/Quote]
up
shenzhenlvbao 2010-10-24
  • 打赏
  • 举报
回复
初学,请指教
jaisokforron 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 houjin_cn 的回复:]

JVM中, 所有对象都是在堆中分配内存空间的,
栈只用于保存局部变量和临时变量,如果是对象,只保存引用,实际内存还是在堆中;

一个java对象占用的内存空间,除了一个固定大小的空间用于描述这个对象属于哪个类,其它的就用于保存它的字段的值;
[/Quote]
这个精辟,大哥从哪看到的啊?是书的话推荐一下,我也想深入了解一下
coooliang 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bao110908 的回复:]
放在堆中,或者放在栈中对你有什么影响么?
[/Quote]

HEHE
再见悟空D 2010-10-24
  • 打赏
  • 举报
回复
我也是初学的,我学的时候关于内存方面很迷惑,后来看了尚学堂的JAVA视频,就明白了,建议你看看
chenluozhi 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zangxt 的回复:]
引用 12 楼 chenluozhi 的回复:

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

还有reference
[/Quote]

谢谢大牛指点!哈哈
hanRivergo 2010-10-23
  • 打赏
  • 举报
回复
学习了。
ZangXT 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 chenluozhi 的回复:]

应该是堆吧。。。只有基本数据类型才放在栈里的,比如int double。。。
[/Quote]
还有reference
小9 2010-10-23
  • 打赏
  • 举报
回复
堆堆堆
dabanphoto 2010-10-23
  • 打赏
  • 举报
回复
new 出来的对象都是放在堆中的
chenluozhi 2010-10-23
  • 打赏
  • 举报
回复
应该是堆吧。。。只有基本数据类型才放在栈里的,比如int double。。。
加载更多回复(10)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧