虚拟机内存中数据细节
虚拟机内存中数据细节
- 如何创建?
- 如何布局?
- 如何访问?
如何创建?
语言层面:创建对象仅仅是一个new关键字而已。
虚拟机中:
1 检查指令的参数是否在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否被加载,解析,初始化;
2 虚拟机为新生对象分配内存.
如何布局?
分为3个区域:
对象头
实例数据
对其填充
对象头:
分为2部分:
1、用于存储对象自身的运行时数据(hashCode,GC分代年龄,锁状态标志,线程持有的锁,偏向线程的id,偏向时间戳等)。
2、类型指针,对象指向它的类元数据的指针,虚拟机通过该指针确定对象是那个类的实例。
如何访问?
1、使用句柄访问,java堆会分分配一块内存作为句柄池,reference中存储就是对象的句柄地址,句柄包含对象实例数据与类型数据各自的具体地址信息。
优点:reference存储稳定的句柄地址,对象移动至改变实例数据指针,不会影响reference本身。
2、直接使用指针访问,java堆对象布局中就必须考虑如何放置访问类型数据相关信息,而reference中存储的直接是对象地址。
优点:速度快,节省一次指针定位的时间开销
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效