当前位置: 首页 > 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.jsqmd.com/news/7182/

相关文章:

  • 在Linux系统上一键配置DoH,解决DNS解析被污染
  • 完整教程:C 语言各种指针详解
  • 51单片机-实现DAC(PWM)数模转换PWM控制呼吸灯、直流电机实验教程 - 教程
  • Elasticsearch集群监控信息(亲测) - 教程
  • 基于Java springboot农村政务服务管理便捷的系统(源码+文档+运行视频+讲解视频)
  • Matplotlib子图布局与响应式设计实战:GridSpec与CSS框架深度结合 - 教程
  • SQL:concat函数(连接字符串)
  • 2025 北京地下室防潮品牌最新推荐排行榜:TOP3 实力品牌出炉,精准解决地下空间潮湿难题
  • python脚本统计fastq数据的GC含量
  • 第一次软件工程作业
  • 2025 年仿石漆品牌最新推荐排行榜:聚焦真石漆仿石漆,水包砂仿石漆,冠晶石仿石漆,外墙仿石漆,多彩仿石漆供采购参考
  • 基于Hadoop的美妆产品网络评价的数据采集与分析-django+spider - 指南
  • 关于数颜色
  • 诚信液压阀块定制厂家推荐榜:实力制造与精准工艺口碑之选
  • 浅谈 Bakas Trick / 不带删尺取 / 对顶栈
  • ESP32与SPI网口芯片DM9051ANX模块硬件引脚接法与ESP-IDF设定参数
  • 聚变堆:中国BEST装置全面开建
  • 如何用pivotby函数实现数据透视(2)
  • 2025 年彩钢板厂家 TOP 企业品牌推荐排行榜,复合彩钢板,保温彩钢板,耐腐蚀彩钢板,净化彩钢板推荐这十家公司!
  • AT_agc020_d [AGC020D] Min Max Repetition
  • 深入解析:ECMAScript 2025 有哪些新特性?
  • tnkstat3e-merge-0
  • 完整教程:Nginx反向代理核心原理揭秘
  • 详细介绍:五大关系数据库(sqlserver、mysql、oracle、pgsql、sqlite)的对象名称和转义字符
  • @RequestParam 什么时候可以省略?
  • 段页式管理方式
  • 完整教程:深度解析ZStack Cloud v5.4.0 LTS 基础架构三大核心突破
  • 深入解析:精读C++20设计模式:结构型设计模式:装饰器模式
  • *和 内存和地址 实例代码
  • list 容器 listr容器与vector容器 list 示例代码