自动内存管理机制(2)——虚拟机对象的创建、内存布局和访问定位
来源:互联网 发布:王者 女娲 知乎 编辑:程序博客网 时间:2024/05/21 12:38
一、对象的创建
虚拟机遇到一条new指令时,首先将去检测这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检测这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,则必须先执行相应的类加载过程。在类加载检查通过后,为新生对象分配内存。
分配内存的方法:
1)“指针碰撞”:Java堆中的内存是绝对规整的,用过的在一边,空闲的在一边,中间有个指针,指针移动。
2)“空闲列表”:Java堆中的内存是绝对规整的,虚拟机将维护一个列表,记录那些内存块是可用的。
二、对象的内存布局
分为:对象头、实例数据、对齐填充
对象头:包括1)用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁等。
2)类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。
实例数据:对象真正存储的信息,即在程序代码中所定义的各种类型的字段内容。
对齐填充:并不必然存在,仅有着占位符的作用。
三、对象的访问定位
Java程序需要通过栈上的reference数据来操作堆上的具体对象。
目前主流的访问方式有使用句柄和直接指针。
使用句柄:堆中会分出一块内存作为句柄池,reference中存储的就是对象的句柄地址,句柄中包含了对象实例数据与类型各自的具体地址信息。最大的好处是在对象移动是,只会改变句柄中的实例数据指针。
直接指针:reference中存储的直接就是对象地址,堆中必须考虑如何放置访问类型数据的相关数据。最大的好处是速度快。
阅读全文
0 0
- 自动内存管理机制(2)——虚拟机对象的创建、内存布局和访问定位
- HotSpot虚拟机对象的创建、内存布局、访问定位
- Java虚拟机(HotSpot)-对象:创建、内存布局、访问定位
- 对象创建、内存布局和访问定位
- 对象的创建、内存布局、访问定位
- 对象的创建、内存布局和访问定位
- 《深入理解Java虚拟机》学习笔记(二)(Java对象的创建、内存布局和访问定位)
- Java虚拟机中对象的内存布局及访问定位
- 深入理解Java虚拟机之对象的创建-内存布局-访问定位
- 对象的创建、内存布局、对象的访问定位
- 对象创建,内存布局,对象的访问定位
- JVM中的对象创建、内存布局和访问定位
- Java 内存——Java虚拟机中对象的创建、存储、访问定位。
- Java对象的创建、内存布局、访问定位
- Java虚拟机(2)自动内存管理机制
- JAVA虚拟机对象内存布局和访问定位-《深入理解JAVA虚拟机》读书笔记
- Hotspot虚拟机--对象分配,内存布局,访问定位
- Java中的内存区域及对象的创建、内存布局与访问定位
- 项目开发管理SDEM
- 编程练习(2)
- Javascript优化后的加减乘除
- 直角三角形
- 当tabLayout+viewPager滑动时,滑动N次后viewPager中的fragment会变成空白页的问题
- 自动内存管理机制(2)——虚拟机对象的创建、内存布局和访问定位
- 美团云OVS-DPDK 2017年工作总结(SRIOV、热升级、热扩容、跨OVS-kernel热迁移)
- Reinforcement learning tips
- pdf_分页器脚本程序
- Construct 2做游戏
- AttributeError: 'dict' object has no attribute 'interitems'
- 1036. 跟奥巴马一起编程(15)
- Linux学习之C语言编程训练2
- OpenCV-Python-Tutorial[3]