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

【JVM】总结篇之对象内存布局 执行引擎

文章目录

  • 对象内存布局
    • 对象的实例化
    • 对象的内存布局
    • 对象的方问定位
  • 执行引擎

对象内存布局

对象的实例化

在这里插入图片描述

new对象流程?(龙湖地产)
对象创建方法,对象的内存分配。(360安全)

1.判断对象对应的类是否加载、链接、初始化

虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。(即判断类元信息是否存在)。
如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class 文件。
如果没有找到文件,则抛出ClassNotFoundException 异常。
如果找到,则进行类加载,并生成对应的Class类对象。

2.为对象分配内存

内存规整->指针碰撞
内存不规整->空闲列表

3.处理并发安全问题

CAS ( Compare And Swap )失败重试、区域加锁:保证指针更新操作的原子性;

TLAB 把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在Java堆中预先分配一小块内存,称为本地线程分配缓冲区,(TLAB ,Thread Local Allocation Buffer)虚拟机是否使用TLAB,可以通过-XX:+/-UseTLAB参数来设定。

4.初始化分配到的空间

内存分配结束,虚拟机将分配到的内存空间都初始化为零值(不包括对象头)。

5.设置对象的对象头

将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储在对象的对象头中。这个过程的具体设置方式取决于JVM实现。

6.执行init方法进行初始化

初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量。

对象的内存布局

在这里插入图片描述
在这里插入图片描述

对象头
在这里插入图片描述

实例数据
在这里插入图片描述

对齐填充

对象的方问定位

在这里插入图片描述
HotSpot这里主要使用第2种方式:直接指针访问

执行引擎

HotSpot JVM 启动方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/468892.html

相关文章:

  • 密码学原理技术-第十一章-Hash Functions
  • 自动采集商品信息、处理数据并自动上架到
  • 指针 const 的组合
  • 《探秘计算机视觉与深度学习:开启智能视觉新时代》
  • windows中硬件加速gpu计划开启cpu的使用率居高不下
  • Transformer知识梳理
  • Kafka 全面指南:从基础到实战
  • AMBA-CHI协议详解(十三)
  • 服务器硬盘有何功能?
  • 构建现代化的AI流水线:从数据处理到模型部署
  • Linux 基础 6.进程
  • Nginx——反向代理(三/五)
  • SMMU软件指南之使用案例(Stage 1使用场景)
  • 解决 ssh connect to host github.com port 22 Connection timed out
  • 基于springboot的课程作业管理系统(源码+数据库+文档)
  • 第5章:索引和性能优化
  • JVM之垃圾回收器概述的详细解析
  • C++进阶:AVL树
  • BBP飞控板中的坐标系变换
  • 利用Mallet进行文本挖掘—— 主题模型与垃圾邮件检测
  • ansible-性能优化
  • 了解RabbitMQ:强大的开源消息队列中间件
  • 【可实战】Bug的判定标准、分类、优先级、定位方法、提交Bug(包含常见面试题)
  • Go语言的 的注解(Annotations)基础知识
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 4:MHE表示能力
  • 我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习