社区
Java SE
帖子详情
一个简单的问题:new出来的对象,对象属性放在JVM的堆中,还是栈中?
jwx0925
2010-10-21 10:26:32
比如
new person(12);
person有个int 属性 age;
这时候这个person按说是放在堆中的,那么,这个age是放在哪呢?
...全文
1626
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)
Java
中
的
堆
和栈
本文深入解析Java虚拟机(
JVM
)
中
堆
和栈两种核心运行时内存区域:栈用于存储线程私有的局部变量、方法调用帧及
对象
引用,遵循LIFO原则;
堆
是全局共享内存,用于动态分配
对象
实例,由垃圾收集器管理。重点涵盖StringPool在
堆
中
的优化机制、内存溢出场景(如StackOverflowError、OutOfMemoryError)、
JVM
参数(-Xss、-Xmx/-Xms)调控方式,以及代码示例
中
变量与
对象
的内存分布逻辑。
new
对象
JVM底层实现
本文探讨了
JVM
内存结构,包括程序计数器、虚拟机栈、本地方法栈、Java
堆
和方法区。详细解释了
new
对象
的过程,涉及类加载检查、内存分配(指针碰撞、空闲列表)、零值初始化和
对象
头设置。最后,讨论了
对象
的初始化阶段,包括<init>方法的执行。
Java 在
new
一个
新
对象
的时候内存
中
发生了什么
本文详细解析Java
中
new
操作符创建
对象
的过程,包括
JVM
编译class文件、执行创建代码、分配引用与
对象
内存,以及引用指向
对象
的全过程。同时,深入探讨
堆
、栈、方法区等内存区域的作用与管理机制。
【
JVM
】Java内存详解:
堆
和栈的区别
本文详细探讨了Java内存
中
的
堆
和栈的区别。栈内存用于存储基本类型变量和
对象
引用,当超出作用域时自动释放。
堆
内存则存放
new
创建的
对象
和数组,由垃圾回收器管理。栈分配快速,适用于局部数据和参数传递,而
堆
适用于大量内存分配,可能产生内存碎片和内存泄漏。Java
中
的
对象
实例存储在
堆
中
,由
栈
中
的引用变量指向。静态变量则在整个程序运行期间持续存在。
JAVA
中
的栈和
堆
本文深入解析JAVA在程序运行时的内存划分,重点讲解栈和
堆
的区别与作用。通过多个示例,详细阐述了基本数据类型、局部变量、
new
创建的
对象
及数组在内存
中
的存储方式,以及它们的生命周期。此外,还探讨了局部变量的概念和垃圾回收机制的工作原理。
Java SE
62,622
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章