对象内存分配方式
虚拟机为新对象分配内存,从堆中划出一块确定大小的内存,因为对象所需内存的大小在类加载完后可以完全确定。
堆内存是否规整:
- 堆内存规整:已使用的内存在一边,未使用内存在另一边。
- 堆内存不规整:已使用内存和未使用相互交错。
堆内存是否规整是由垃圾收集器是否带有压缩整理功能决定的。
内存分配方式:
分配方式的选择 取决于 Java堆内存是否规整:
- 指针碰撞方式:
-
- 堆内存绝对规整。
- 分配过程:将已使用内存和为使用内存之间放一个分界点的指针,分配内存时,指针会向未使用内存方向移动,移动一段与对象大小相等的距离。
- 空闲列表:
-
- 堆内存不规整。
- 分配过程:虚拟机内部维护了一个记录可用内存块的列表,在分配时从列表找一块足够大的空间划分给对象实例,并更新列表上的记录。
Java堆是否规整 由所采用的垃圾收集器是否带有压缩整理功能决定