社区
Java SE
帖子详情
一个简单的问题:new出来的对象,对象属性放在JVM的堆中,还是栈中?
jwx0925
2010-10-21 10:26:32
比如
new person(12);
person有个int 属性 age;
这时候这个person按说是放在堆中的,那么,这个age是放在哪呢?
...全文
1513
32
打赏
收藏
一个简单的问题:new出来的对象,对象属性放在JVM的堆中,还是栈中?
比如 new person(12); person有个int 属性 age; 这时候这个person按说是放在堆中的,那么,这个age是放在哪呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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属性
退一步海阔天空l忍一时风平浪静
2010-10-24
打赏
举报
回复
当然是堆里面咯~ 你这个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)
JVM
:
堆
与栈
在Java
中
一个
线程就会相应有
一个
线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要
一个
独立的线程栈。而
堆
则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或...
8.
JVM
关于
对象
分配在
堆
、栈、TLAB的理解
我们知道,一般在java程序
中
,
new
的
对象
是分配在
堆
空间
中
的,但是实际的情况是,大部分的
new
对象
会进入
堆
空间
中
,而并非是全部的
对象
,还有另外两个地方可以存储
new
的
对象
,我们称之为栈上分配以及TLAB ...
JVM
关于
对象
分配在
堆
、栈、TLAB的理解
我们知道,一般在java程序
中
,
new
的
对象
是分配在
堆
空间
中
的,但是实际的情况是,大部分的
new
对象
会进入
堆
空间
中
,而并非是全部的
对象
,还有另外两个地方可以存储
new
的
对象
,我们称之为栈上分配以及TLAB ...
Java
中
new
一个
对象
是
一个
怎样的过程?
JVM
中
发生了什么?
Java
中
new
一个
对象
的步骤: 1.当虚拟机遇到一条
new
指令时候,首先去检查这个指令的参数是否能在常量池
中
能否定位到
一个
类的符号引用(即类的带路径全名),并且检查这个符号引用代表的类是否已被加载、解析和初始化...
JVM
运行时数据区(栈和
堆
)
ART 虚拟机
JVM
的组成部分及架构运行时数据区方法调用过程虚拟机栈基本信息程序计数器/PC寄存器栈帧内部结构解析局部变量表操作数栈动态链接方法返回地址异常表
对象
分配过程线程共享区域方法区直接内存深入辨析
堆
栈...
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章