博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「每天一道面试题」Java虚拟机为新生对象分配内存有哪两种方式?
阅读量:6873 次
发布时间:2019-06-26

本文共 463 字,大约阅读时间需要 1 分钟。

「每天一道面试题」Java虚拟机为新生对象分配内存有哪两种方式?

当使用new关键字创建一个类的对象时,虚拟机需要为新生对象分配内存空间,而对象的大小在类加载完成后已经确定了,所以分配内存只需要在Java堆中划分出一块大小相等的内存。在Java虚拟机中有指针碰撞和空闲列表两种方式分配内存。

指针碰撞方式

如果Java堆中内存是规整排列的,所有被用过的内存放一边,空闲的可用内存放一边,中间放置一个指针作为它们的分界点,在需要为新生对象分配内存的时候,只要将指针向空闲内存那边挪动一段与对象大小相等的距离即可分配。

空闲列表方式

如果Java堆中内存不是规整排列的,用过的内存和可用内存是相互交错的,这种情况下将不能使用指针碰撞方式分配内存,Java虚拟机需要维护一个列表用于记录哪些内存是可用的,在为新生对象分配内存的时候,在列表中寻找一块足够大的内存分配,并更新列表上的记录。

Java虚拟机选择策略

Java虚拟机采用哪种方式为新生对象分配内存,取决于所使用的垃圾收集器,当垃圾收集器具有整理过程时,虚拟机将采用指针碰撞的方式;当垃圾收集器的回收过程没有整理过程时,则采用空闲列表方式。

转载地址:http://tjlfl.baihongyu.com/

你可能感兴趣的文章
Kubernetes首爆严重安全漏洞,请升级你的Kubernetes
查看>>
Linux之父为过去的言行道歉,宣布离开社区反思
查看>>
Firefox 50优化Electrolysis
查看>>
家政APP开发,需要注意什么问题?
查看>>
畅谈云原生(上):云原生应用应该是什么样子?
查看>>
RedHat发布JBoss 7.2,完全支持Java EE 8规范
查看>>
看阿里毕玄与众位大咖如何解读团队文化、异地管理和技术前瞻性?
查看>>
iOS应用开发登陆Windows平台惹争议
查看>>
IBM 数据科学平台三大特性解决数据科学家协作问题
查看>>
C#的未来:扩展属性及更多
查看>>
Git实用技巧和命令
查看>>
ThoughtWorks技术雷达发布四大技术趋势
查看>>
无需安装的CLI才是最好的
查看>>
腾讯云助力广汽 打造新一代智能网联云平台
查看>>
IBM首家发布了公有云中的裸机Kubernetes
查看>>
准备好了?测试人员迟早会被要求测试包含区块链技术的解决方案
查看>>
AWS开源并扩展无服务器应用程序模型(SAM)实现
查看>>
3.9、在方法上使用@ModelAttribute注解
查看>>
如何用php实现一个web服务器
查看>>
Camel - 软负载管理中间件,通过界面及接口管理Nginx集群 来自大众点评~
查看>>