一个简单的问题:new出来的对象,对象属性放在JVM的堆中,还是栈中? 比如new person(12);person有个int 属性 age;这时候这个person按说是放在堆中的,那么,这个age是放在哪呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从Person类定义来看,Person对象包括了一个属性age,而属性是需要内存来存储的,Person对象由多块内存来组成,不同的内存块存储了Person对象的不同属性。换句话说,在你创造Person对象的时候堆空间会分配一块内存,而这一块内存又由多块小内存组成,Person对象的不同属性就被存储在这些不同的小内存块中。 JVM中, 所有对象都是在堆中分配内存空间的,栈只用于保存局部变量和临时变量,如果是对象,只保存引用,实际内存还是在堆中;一个java对象占用的内存空间,除了一个固定大小的空间用于描述这个对象属于哪个类,其它的就用于保存它的字段的值; new出来的 不管什么 都放在对中。你可以把new出来的对象想象成堆里的一个大房子,而age呢,就住在那个大房子里。 age是person的一部分,应该放哪里?人在屋里,那这个人的胳膊在哪里?一般说对象是分配在堆里的,不过对jvm而言,由于可能使用标量替换之类的优化技术,可能根本不会在堆中创建对象。 如果想知道 去看看 深入JAVA虚拟机 应该是堆吧只有基本数据类型才放在栈里的,比如int double new 出来的对象都是放在堆中的 new 出来的是放在堆里的。 是这样的,举个例子吧, String myString = new String() ;myString放在堆里面 ,而实际的开辟的变量的空间放在栈里面 当然是堆里面咯~ 你这个int类型是一个成员变量,他是属于你这个new出来的对象中的一个成员。而你的对象在堆区,成员变量便在你这个对象所在的那块内存区域里面! 我也是初学的,我学的时候关于内存方面很迷惑,后来看了尚学堂的JAVA视频,就明白了,建议你看看 age这个属性放在堆中,在栈中会存放你这个person对象的引用,该引用使用一个指针从栈内存中指向堆内存。 如果属性不是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属性 new出来的应该是在堆中,前几天看书看到的 new Person(); new出来的对象放在堆里的,堆里一块内存存放该对象。该块内存又分为一块块存放该对象的所有属性,不管是引用型的还是基本类型。所以 int age 是在堆中的 想要interrupt发生IO阻塞的线程该怎么办啊? 如果把一个JAVA的应用程序项目打成的JAR包,能让他运行起来呢!?, threads 问题. 请问如何用java实现类似windows屏保-飞越星空的程序,请指教啊!!! Java图标 向各位师兄师姐请教一个JAVA小程序 高分请教一个简单问题! java初级对象问题 我剩的只有10 分,我要删除相对目录下的文件,怎么办??? 不用数据库这种数据怎么排序呢? 正则表达式替换字符串 代码求解释
换句话说,在你创造Person对象的时候堆空间会分配一块内存,而这一块内存又由多块小内存组成,Person对象的不同属性就被存储在这些不同的小内存块中。
栈只用于保存局部变量和临时变量,如果是对象,只保存引用,实际内存还是在堆中;一个java对象占用的内存空间,除了一个固定大小的空间用于描述这个对象属于哪个类,其它的就用于保存它的字段的值;
myString放在堆里面 ,而实际的开辟的变量的空间放在栈里面
而你的对象在堆区,成员变量便在你这个对象所在的那块内存区域里面!
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属性
new出来的对象放在堆里的,堆里一块内存存放该对象。该块内存又分为一块块存放该对象的所有属性,不管是引用型的还是基本类型。所以 int age 是在堆中的