JVM 对象创建与访问

本贴最后更新于 1227 天前,其中的信息可能已经水流花落

对象创建

image.png

  • 创建过程
    • 检查加载 检查符号引用, 如未解析, 则类加载
    • 分配内存
    • 内存空间初始化 赋初值
    • 对象头设置
    • 初始化
  • 划分内存方式
    • 指针碰撞(内存整理)
    • 空闲列表(标记清理)
  • 并发安全
    • TLAB(线程本地缓冲)
    • CAS 抢占

对象内存布局

image.png

对象访问定位

  • 句柄 间接引用堆上的实例(Hotspot 使用) 安全, 方便 GC
  • 直接引用

对象分配策略

  • 栈上分配
    • 经过逃逸分析, 无法逃逸的对象可能在栈上直接分配
    • 标量替换, 如果无法逃逸的对象只有标量属性赋值和访问操作, 则不创建对象, 直接拆分成栈上标量
  • TLAB 线程本地分配
  • 正常堆上分配
    • 优先 Eden 区
    • 大对象直接分配在老年代
  • 分配空间担保原则 新生代垃圾进入老年代前的担保
    • 默认: 当老年代可用空间大于新生代总对象大小, 则可分配; 如不满足, 进入担保策略, 老年代可用空间大于历史进入老年代的垃圾平均值, 则可分配, 如果分配失败, 则 FullGC; 如不满足, 直接 FullGC
    • 关闭 HandlePromotionFailure 担保: 当老年代可用空间大于新生代总对象大小, 则可分配; 如不满足, 直接 FullGC
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...