Java入门之了解JVM(25)
堆中的内存是如何分配给对象的?
在jvm中存在两种分配方式:指针碰撞、空闲列表
而采用哪种方式,取决于使用的GC收集器是否有压缩整理功能,即取决与GC收集器使用的是什么算法,有则使用 "指针碰撞" 没有则使用 "空闲列表"
关于虚拟机分配内存的线程安全问题
首先虚拟机分配内存这个动作并不是线程安全的;例如使用指针碰撞方法分配内存的情况下,正当要给A对象调节指针位置给其分配内存时,调节指针位置可能会被其他对象抢先一步,这样就会出先问题了
针对上面的问题,JVM有两种方法解决:
堆分配内存的整合动作进行同步(通过CAS加失败重试)使用TLAB(本地线程分配缓存),即预先分配一小块内存给线程,当线程中有创建对象的动作时,就各自的这一小块内存中进行内存分配,不够时再申请TLAB外的内存;是否使用TLAB可以通过设置参数-XX:+UseTLAB来开启TLAB,默认是开启的关于内存逃逸分析
参考文章:http://www.hollischuang.com/archives/2398
推荐阅读
- 唐僧|tap评分高达9.1,《黑色沙漠》手游终于要来了,你了解了吗?
- viper|最佳外援是VIPER,新任FMVP坐不住了?本土选手机制了解一下
- lpl|LPL为何处理不了猫咪,自身了解太浅,根本不重视S11!
- 传奇|我们玩传奇3不仅仅是游戏,更是情怀和回忆,这款手游你了解吗?
- t1|vivo T1究竟值不值得购买?看了这些后你可能有更深了解
- 使命召唤18|王者荣耀 想要轻松上分英雄克制关系了解一下 公孙离克制上官婉儿
- 暗黑破坏神2|《暗黑破坏神2》七种职业!那个才是最适合新手的入门职业!
- s6|金铲铲之战:测试服内容抢先看,5分钟带你了解S6赛季的变化
- 电影|“王者宇宙”全面开启,三分钟了解官方后续动作,你想要的全都有
- 米哈游|米游社三周年,米哈游游戏的必备软件,你了解多少?