1、指针碰撞
如果jvm内存是规整的,就是一边是已使用的内存,另外一边是未使用的内存,中间是指针,jvm需要给新对象分配内存时,就会将指针往未使用的内存移动一段和新对象一样大小的距离,这样jvm就完成了内存分配。
2、空闲列表
如果jvm内存不是规整的,已使用的,未使用的内存,都是杂乱无章的,这个时候就不可能使用指针碰撞,Java虚拟机就会维护一个空闲列表,用来记录哪些内存是可用的,然后jvm给新对象分配内存时,就会找到一个足够大的空格,来存放对象。
总结
至于jvm使用那种分配方法,是由垃圾收集器决定的,如果垃圾收集器存在整理过程的话,就会使用指针碰撞方法,如果不存在整理过程,则使用空闲列表