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

对象分配在哪块内存?

对象在JVM中的分配遵循分代分配策略,核心依据是对象的生命周期长短,具体分配位置如下:

1. 优先分配到年轻代的伊甸区(Eden Space)

这是对象分配的默认且最主要的位置。程序中所有新创建的对象(如 new Object()),都会优先被分配到年轻代的伊甸区。

这是因为JVM基于“大部分对象朝生夕死”的特性设计,伊甸区作为对象的“出生地”,能快速容纳新对象,后续通过Minor GC(年轻代GC)高效回收短命对象。

2. 大对象直接分配到老年代

对于体积过大的对象(如长度极长的数组、占用内存较多的集合),会直接跳过年轻代,分配到老年代。

  • 目的:避免大对象在年轻代的伊甸区和幸存者区之间频繁复制(复制算法会产生大量开销),减少Minor GC的性能消耗。

  • 阈值:大对象的判定标准由JVM参数 XX:PretenureSizeThreshold 控制(默认无明确值,不同JVM实现有差异)。

3. 长期存活的对象从年轻代晋升到老年代

年轻代中“存活较久”的对象,会逐步从年轻代晋升到老年代,具体逻辑:

  • 对象在年轻代的幸存者区(Survivor 0/1)中,每经历一次Minor GC且存活,其“年龄计数器”会+1。

  • 当年龄达到JVM阈值(默认15,由参数 XX:MaxTenuringThreshold 控制)时,对象会被“晋升”到老年代,成为长期存活对象。

4. 特殊情况:栈上分配与TLAB

• 栈上分配:对于“逃逸分析”判定为“不会逃出方法作用域”的对象(如方法内临时创建、仅在方法内使用的对象),会直接分配在当前线程的栈帧中,而非堆内存。栈帧销毁时对象自动回收,无需GC参与,性能极高。

• TLAB(线程本地分配缓冲):为避免多线程在伊甸区分配对象时的竞争,JVM会为每个线程在伊甸区划分一块“私有缓冲区域”(TLAB),线程创建对象时优先在自己的TLAB中分配,进一步提升分配效率。

总结

对象分配的核心流程

  1. 新对象优先分配到伊甸区(或线程的TLAB);

  2. 若为大对象,直接分配到老年代;

  3. 年轻代中存活的对象经多轮Minor GC后,年龄达标则晋升到老年代;

  4. 无逃逸的临时对象,直接分配到线程栈(非堆内存)。

http://www.dtcms.com/a/418908.html

相关文章:

  • AI Agent智能体如何突破“听懂却做不好”困局?多模态技术打通全链路
  • 图卷积网络 (GCN)
  • JMeter中常用的配置优化
  • 网站怎样做优化调整深圳vi设计深圳vi设计公司
  • 做教育培训网站需要资质么网站对联广告图片
  • 《Muduo网络库:实现Channel通道以及Poller抽象基类》
  • 安全系统架构
  • 中国画廊企业网站模板thinkphp做视频网站
  • C++ 位运算 高频面试考点 力扣 268. 丢失的数字 题解 每日一题
  • 【展厅多媒体】解析VR虚拟驾驶实现多场景自由切换
  • 网站建设吉金手指专业11青海省高等级公路建设管局网站
  • 厦门北京网站建设公司怎样给一个公司做网站
  • 58.Nginx的反向代理和负载均衡
  • 阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
  • 做营销型网站价格wordpress 考试系统
  • 黄金网站app视频播放画质选择人力资源网站建设计划书
  • 我国省级档案网站建设状况wordpress插件events
  • 【CSS】flex布局
  • 【论文阅读】具身人工智能:从大型语言模型到世界模型
  • 【论文阅读】Segment Anything
  • 大连网站制作仟亿科技wordpress免费网站模板下载
  • 商城网站开发的任务书网址大全2345
  • 八、安装 Hadoop
  • 华为电脑 银河麒麟系统 使用CrossOver安装微软Office2016
  • 设计模式(C++)详解——迭代器模式(3)
  • 做58网站怎么赚钱吗公司起名字大全免费四个字
  • 基于Python的CrewAI多智能体协同写作助手
  • 按月付费网站建设网站建设学那些课程
  • Nginx原生模快和Nginx平滑升级
  • 响应模板作为特殊标记(107)