在语言层面上,创建对象时只要一个new的关键字就可以了。
在虚拟机上:
虚拟机遇到一条new指令时,首先要检查这个指令参数是否能在常量池中定位到一个类的符号使用,并且检查这个符号引用代表的类是否已加载、解析和初始化过。如果没有,那必须执行相应的类加载过程。
对象分配内存的方式:
1、指针碰撞:java堆中内存绝对规整,空闲内存放在一边,所有用过的内存放在一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离。
2、空闲列表:如内存不是规整,在分配时从列表中找到一块足够大的空间划分给对象,并更新列表上的记录。