JVM--内存分配策略

  Java虚拟机中自动内存管理自动化的解决了两个问题:

    1、回收给对象分配的内存

    2、给对象分配内存

  下面来看给对象分配内存的策略:

一、对象优先在Eden分配

  大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机发起Minor GC。

  新生代中Eden区与Survivor区的空间比例是8:1。若Survivor空间不够,可通过分配担保机制将对象转移到老年代去。

  Minor GC:发生在新生代的垃圾收集动作。

  Full   GC:发生在老年代的GC。

二、大对象直接进入老年代

  大对象:需要大量连续内存空间的Java对象。

   新生代采用复制算法收集内存。

三、长期存活的对象将进入老年代

  虚拟机采用分代收集的思想管理内存,虚拟机给每个对象定义一个对象年龄计数器。若对象在Eden区被分配内存,并且可以被Survivor容纳,将被移动到Survivor空间,对象年龄设为1。此后每“熬过”一次Minor GC ,年龄增加1,年龄到一定程度,该对象会被晋升到老年代去。

四、动态对象年龄判断

  如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象直接进入老年代。

五、空间分配担保

  新生代使用复制收集算法,但为了内存利用率只使用其中一个Survivor空间,当出现大量对象在Minor GC后仍然存活的情况,就需要老年代进行分配担保,把Survivor无法容纳的对象直接进入来年代。

 

posted @   无虑的小猪  阅读(102)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示