HotSpot虚拟机是java虚拟机中主要使用的一种,我们平时所说的java虚拟机是泛指,而Hotspot虚拟机就是其中使用最广泛的一种
对象的创建
Java 对象的创建过程
- 类加载检查
- 分配内存
- 初始化零值
- 设置对象头
- 执行 init 方法
- 类加载检查
虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。
详细请看Java面试知识点(三十六)类加载机制
- 分配内存
在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲列表” 两种,选择那种分配方式由 Java 堆是否规整决定,而 Java 堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。
详见Java面试知识点(五十二)虚拟机 分配内存
- 内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),这一步操作保证了对象的实例字段在 Java 代码中