当前位置: 首页 > news >正文

JVM的内存分配策略有哪些?

JVM的内存分配策略主要围绕对象在堆内存中的分配规则展开,核心目标是高效利用内存并减少垃圾回收开销。主要分配策略如下:

1. 优先在Eden区分配

大多数对象在新生代的Eden区中创建。当Eden区没有足够空间时,JVM会触发Minor GC(新生代GC)。

示例:
new Object() → 优先分配到Eden区

2. 大对象直接进入老年代

  • 大对象(如长字符串、大数组)会直接分配到老年代,避免在新生代频繁GC时产生大量内存复制
  • 通过-XX:PretenureSizeThreshold参数设置阈值(单位:字节),超过此值的对象直接进入老年代
示例参数:
-XX:PretenureSizeThreshold=1048576  // 1MB以上的对象直接进入老年代

3. 长期存活的对象进入老年代

  • 每个对象有一个年龄计数器,在Eden区出生并经历一次Minor GC后存活,会被移动到Survivor区,年龄变为1
  • 之后每在Survivor区经历一次Minor GC存活,年龄就+1
  • 当年龄达到阈值(默认15)时,会被晋升到老年代
  • 通过-XX:MaxTenuringThreshold参数调整晋升阈值
示例参数:
-XX:MaxTenuringThreshold=10  // 年龄达到10的对象进入老年代

4. 动态对象年龄判定

当Survivor区中相同年龄的所有对象大小总和大于Survivor区的一半时,年龄大于或等于该年龄的对象会直接进入老年代,无需等待达到MaxTenuringThreshold。

5. 空间分配担保

  • 在Minor GC前,JVM会检查老年代最大可用连续空间是否大于新生代所有对象总空间
  • 若满足,则Minor GC安全
  • 若不满足,会检查是否允许担保失败(-XX:+HandlePromotionFailure
  • 若允许,则判断老年代最大可用连续空间是否大于历次晋升到老年代的平均大小,若满足则尝试Minor GC,否则进行Full GC

6. 线程本地分配缓冲区(TLAB)

  • JVM为每个线程在Eden区分配一块私有缓存区域(TLAB)
  • 线程创建对象时优先在自己的TLAB中分配,减少并发分配的锁竞争
  • 通过-XX:+UseTLAB开启(默认开启),-XX:TLABSize设置大小

这些策略共同作用,实现了对象在JVM堆中的合理分配,平衡了内存利用率和GC效率。实际应用中,这些策略会根据JVM版本、垃圾收集器类型和具体参数配置有所调整。

http://www.hskmm.com/?act=detail&tid=22843

相关文章:

  • 在Linux系统上一键配置DoH,解决DNS解析被污染
  • 《电路基础》第五章学习笔记
  • Elasticsearch集群监控信息(亲测) - 教程
  • 2025超声波清洗机厂家TOP企业品牌推荐排行榜,龙门式,悬挂式,全自动,多臂式,多槽式,履带式,通过式,单槽式,摆动式,平移式超声波清洗机公司推荐!
  • SQL:concat函数(连接字符串)
  • 2025 北京地下室防潮品牌最新推荐排行榜:TOP3 实力品牌出炉,精准解决地下空间潮湿难题
  • python脚本统计fastq数据的GC含量
  • 第一次软件工程作业
  • 关于数颜色
  • 2025仿石漆厂家 TOP 企业品牌推荐排行榜,真石漆,水包砂,冠晶石,外墙,多彩,批刮,别墅,批发,出口仿石漆推荐这十家公司!
  • CF1615F LEGOndary Grandmaster
  • 2025 年仿石漆品牌最新推荐排行榜:聚焦真石漆仿石漆,水包砂仿石漆,冠晶石仿石漆,外墙仿石漆,多彩仿石漆供采购参考
  • 诚信液压阀块定制厂家推荐榜:实力制造与精准工艺口碑之选
  • 24 两两交换链表中的节点
  • 算法导论图论部分总结
  • 19 删除链表的倒数第 N 个结点
  • 浅谈 Bakas Trick / 不带删尺取 / 对顶栈
  • 聚变堆:中国BEST装置全面开建
  • web
  • 如何用pivotby函数实现数据透视(2)
  • 2025 年彩钢板厂家 TOP 企业品牌推荐排行榜,复合彩钢板,保温彩钢板,耐腐蚀彩钢板,净化彩钢板推荐这十家公司!
  • 251002
  • AT_agc020_d [AGC020D] Min Max Repetition
  • 题解:P7810 [JRKSJ R2] Upper
  • 记录自己被AWS坑了6刀
  • 如何用pivotby函数实现数据透视(1)
  • 10/1
  • 详细介绍:【数据结构】图论核心应用:关键路径算法详解——从AOE网到项目管理实战​
  • tnkstat3e-merge-0
  • JavaScript零基础入门速通(完整) - 指南