JVM 对象创建与内存分配

系统运行中,对象创建过程

  1. 依据逃逸分析,判断是否能栈上分配?
    1. 如果不存在逃逸,该对象就可以通过标量替换分解成成员标量分配在栈内存中,和方法的生命周期一致,随着栈帧出栈时销毁,减少了 GC 压力,提高了应用程序性能。
    2. 否则,继续下一步。
  2. 判断是否大对象?
    1. 如果是,直接分配到堆上 Old Generation 老年代上。如果对象变为垃圾后,由老年代GC 收集器(比如 Parallel Old, CMS, G1)回收。
    2. 否则,继续下一步。
  3. 判断是否可以在 TLAB中分配?
    1. 如果是,分配到 TLAB 中。TLAB 为本地缓存分配区,在Eden 区中。如果分配失败(对象大于当前TLAB所能存放的空间),重新分配一个TLAB区进行对象分配。如果还失败,就分配到 Eden区
    2. 否则,在 TLAB外堆上的Eden区分配。
  4. 判断是否可以在 Eden中分配?
    1. 如果是,直接分配
    2. 否则,在 Eden区进行 GC 直到可以进行空间分配。

对象创建流程图(重要)

image

对象内存分配流程图(重要)

image


__EOF__

本文作者之士咖啡
本文链接https://www.cnblogs.com/zz-1q/p/17762587.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   之士咖啡  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示