_:n6ee0986c474e4255b3a01c7f006eef11xb0
<http://schema.org/description>
"创建对象\n\n当遇到一个 new 操作符后，HotSpot 创建一个指定的对象，过程大致如下：\n\n 1. 获取类型信息\n    检查指定的类是否能在运行时常量池中找到相应的符号引用，符号引用代表的类是否完成类加载。\n 2. 分配内存\n    这部分的操作与操作系统为进程进程分配内存相似，可以通过指针碰撞或者空闲链表来完成。\n    值得注意的是分配内存同样具有并发问题（不过由 jvm 解决了），采用将分配内存的操作同步处理，或者给每个线程线程划定一个缓冲区，每个线程在相应的缓冲区中分配内存。\n 3. 内存置 0\n    分配完内存之后 jvm 虚拟机需要将对象对应的内存区域置为 0 （不包括对象头），这个操作保证了在未赋值的情况下为相应的 0 值。比如数字型的基础数据类型为 0，而对象引用为 null。避免了对象引用指向非法内存地址的问题。\n 4. 设置对象头\n    对象头中的信息包括对象的类型，类的元数据位置，hash 值（推迟计算），GC 分代年龄等。\n 5. 执行初始化块和构造函数\n\n\n对象内存布局\n\n一个对象有 3 部分的信息：对象头，实例数据，对齐填充。\n\n\n对象头\n\nMar"
<https://blog.kicey.site/hotspot/>