微信公众号:路人zhang
网站救助计划

1.为阅读体验,本站无任何广告,也无任何盈利方法,站长一直在用爱发电,现濒临倒闭,希望有能力的同学能帮忙分担服务器成本


2.捐助10元及以上同学,可添加站长微信lurenzhang888,备注捐助网站倒闭后可联系站长领取本站pdf内容


3.若网站能存活下来,后续将会持续更新内容

当前位置: Java > JVM高频面试题 > 4.创建对象时内存是如何分配的

上文提到,创建对象的内存分配方式会根据Java内存是否完整分为指针碰撞(完整)空闲列表(不完整)两种:

  • 指针碰撞:假设为Java堆中内存是绝对完整的,所有用过的内存放到一边,空闲的内存放到另一边,中间放着一个指针作为分界点的指示器,所分配的内存就是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为指针碰撞。
  • 空闲列表:假设Java堆中的内存并不是完整的,已使用的内存和空闲内存都混在一起了,这时虚拟机需要维护一个列表,用来记录哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为空闲列表。

注:选择哪种分配方式由Java堆是否完整决定,Java堆是否完整由所采用的垃圾收集器是否带有压缩整理功能决定。因此,在使用Serial、ParNew等垃圾收集器时系统采用的是指针碰撞,在使用CMS等基于标记擦除算法的收集器时,采用的是空闲列表。

本站链接:https://www.mianshi.online如需勘误或投稿,请联系微信:lurenzhang888


点击面试手册,获取本站面试手册PDF完整版