A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
我们知道创建对象的时候,系统会自动调用构造方法,来进行初始化操作。在内存中,构造方法的调用也是在栈中进行的吗?

最佳答案

查看完整内容

JVM内存分严格意义上讲分为 栈内存 堆内存 方法区 你的疑问是方法调用 构造方法的调用 的顺序 是 JVM-栈中的对象引用---->方法区---->堆中的实体 在堆中new对象的时候 构造函数的地址码也就是对象的地址 会在方法区中存储这个地址 至于为什么 可能Object类中的内部机制吧 我是这样理解的 栈内存:某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申 ...

11 个回复

倒序浏览
JVM内存分严格意义上讲分为 栈内存  堆内存  方法区    你的疑问是方法调用    构造方法的调用 的顺序  是  JVM-栈中的对象引用---->方法区---->堆中的实体 在堆中new对象的时候  构造函数的地址码也就是对象的地址 会在方法区中存储这个地址  至于为什么  可能Object类中的内部机制吧  我是这样理解的



栈内存:某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈。当函数运行结束时,分配给函数的栈空间被收回,在这个函数中被定义的变量也随之被释放和消失。
堆内存:通过new产生的数组和对象分配在堆内存中。堆内存中分配的内存,由JVM提供的GC(垃圾回收机制)来管理。在堆内存中产生了一个数组对象后,我们还可以在栈中定义一个变量,这个栈中变量的取值等于堆中对象的首地址。栈内存中的变量就成了堆内存中数组或者对象的引用变量。我们以后就可以在程序中直接使用栈中的这个变量来访问我们在堆中分配的数组或者对象,引用变量相当于数组或者对象起的一个别名,或者代号。
回复 使用道具 举报
内存分为栈内存 和堆内存你说的是你是个
回复 使用道具 举报
雨中的泪 发表于 2015-10-12 14:37
内存分为栈内存 和堆内存你说的是你是个

{:2_30:}你是没看懂我问的问题啊,我是问构造方法的调用是不是也在栈中调用,只是确认一下
回复 使用道具 举报
是的 用过之后 直接出栈
回复 使用道具 举报
构造方法的调用是栈中进行一次之后,出栈回收呢, 还是进堆。
回复 使用道具 举报
kamo 中级黑马 2015-10-12 21:42:45
7#
出栈之后就销毁了,但是代码好像是保存在方法区,这个在堆中,下次再用时再入栈。
回复 使用道具 举报
不是,栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。函数的调用主要在方法区,然后进入栈中获取对象。
回复 使用道具 举报
迷茫不堪的年纪 发表于 2015-10-12 20:43
构造方法的调用是栈中进行一次之后,出栈回收呢, 还是进堆。

栈中的数据,弹栈后就消失了
回复 使用道具 举报
Zero_base 发表于 2015-10-13 00:02
不是,栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句 ...

你说的不对啊,方法的调用是要进栈的
回复 使用道具 举报
chengaq0 发表于 2015-10-13 08:04
栈中的数据,弹栈后就消失了

OK,刚才又看了一下, 已然明白
回复 使用道具 举报
是的。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马