一、Java对象创建过程
1、JVM遇到一条新建对象的指令时,首先去检查这个指令的参数是否能在常量池中定义到一个类的符号引用,然后加载这个类;
2、为对象分配内存。一种办法时“指针碰撞”,一种办法是“空闲列表”,最终常用的办法是“本地线程缓冲分配”;
3、将除对象头外的对象内存空间初始化为0;
4、对对象头进行必要设置。
二、类的生命周期
类的生命周期包括这几个部分,加载、连接、初始化、使用和卸载,其中前三步是类的加载过程。
1、加载:查找并加载类的二进制数据,在Java堆中也创建一个java.lang.Class类对象
2、连接:连接又包含验证、准备、初始化三个过程:
2.1验证:验证文件格式、元数据、字节码、符号引用验证;
2.2准备:为类的静态变量分配内存,并将其初始化为默认值;
2.3解析:把类中的符号引用转换为直接引用;
3、初始化:为类的静态变量赋予正确的初始值
4、使用:new对象在程序中使用
5、卸载:执行垃圾回收
三、Java的对象结构
Java对象结构由三部分组成:对象头、实例数据、对齐填充
1、对象头:由两部分组成,第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、线程持有的锁、偏向线程ID(一般占32/64 bit)。第二部分是指针类型,指向对象的类元数据类型(即对象代表哪个类)。如果是数组对象,则对象头中还有一部分用来记录数组长度。
2、实例数据:用来存储对象真正的有效信息。(包括父类继承下来的和自己定义的)
3、对齐填充:JVM要求对象起始地址必须是8字节的整数倍(8字节对齐)
标签:初始化,生命周期,Java,对象,线程,对齐,加载 From: https://blog.51cto.com/u_16244372/7412984