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无法容纳的对象直接进入来年代。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)