JAVA虚拟机–对象的创建

暂时只讨论普通的Java对象,不包括数组和Class对象

  1. 虚拟机遇到一条new指令,先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程

  2. 类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后就可以完全确定,为对象分配空间的任务等同于把一块确定大小的内存从java堆中划分出来

    不同的JVM垃圾收集器在分配内存时的表现也是不相同的,具体表现为两种:

    1. 如果垃圾收集器选择的时Serial,ParNew这种基于压缩整理算法的,那么内存时规整的,虚拟机将采用 指针碰撞法来为对象分配内存。意思时所有用过的内存在一遍,空闲的内存在另一边,中间放着一个指针作为分界点的指示器,分配内存就仅仅时将指针想空闲那边挪动一段与对象大小相等的距离罢了