java创建一个对象都在内存中做了什么事情
2016-03-01 20:30:27 1 举报
在Java中,创建一个对象时,内存中会发生以下操作: 1. 分配内存空间:为对象分配一块连续的内存空间,用于存储对象的数据和成员变量。 2. 初始化成员变量:将对象的构造函数中的参数值赋给成员变量,进行初始化操作。 3. 执行构造函数:调用对象的构造函数,执行其中的代码逻辑。 4. 返回引用:将新创建的对象的引用返回给调用者,以便可以继续使用该对象。 这些操作是Java虚拟机(JVM)自动完成的,程序员无需手动管理内存分配和释放。通过这种方式,Java实现了内存管理的自动化,提高了开发效率和程序的稳定性。
作者其他创作
大纲/内容
1.使用句柄访问。java堆中将会划分出一块内存来作为句柄池,p中存放的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息
引用中存放的是稳定的句柄地址,在对象被移动(比如垃圾收集)中只会改变句柄中的实例数据指针,而引用本身不用更改
在该实体空间中进行属性的空间分配,并进行了默认初始化
将首地址分配给p,p就引用的该对象(指向了该对象)
将硬盘上指定位置的Person.class文件加载进内存
速度快,hotspot使用这一种
2.使用直接指针访问。p中存储的直接就是对象地址。
对空间中属性进行显性初始化
调用构造函数进行初始化
执行main方法,在栈内存中开辟main方法的空间,在main方法的栈区分配一个变量p
对空间中构造代码块进行初始化
1.指针碰撞。java堆中内存是绝对规整的,分配内存只需将指针向空闲空间那边挪动一段与对象大小相等的距离。
在堆内存中开辟一个空间实体,分配一个一个内存首地址值(new)
Person p = new Person();
2.空闲列表。java堆中内存并不是规整的。虚拟机维护一个列表,记录哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录
0 条评论
下一页