您的位置:首页 > 编程语言 > Java开发

Java虚拟机-对象的创建,对象头

2016-01-14 19:44 246 查看

创建

new

检查new指令的参数,是否能在常量池中定位到一个类的引用符号

检查该类是否被加载、解析和初始化。 没有则执行相应的过程

分配内存 存在2中情况。取决于java内存堆是否规则

a。指针碰撞 连续的只要移动指针即可 Serial、ParNew Compact等带有压缩整理的 使用此方法

b。空闲列表 ; CMS 基于Mark-Sweep算法的 收集器的时候。

考虑是否线程安全

a: 同步,保证原子性

b:本地线程分配缓冲 TLAB Thread Local Alloction Buffer 只有TLAB用完 才同步

内存空间初始化为零值

对象头 (hash码 是否有偏向锁, GC分代信息 元数据等

对象头

a: 哈希码,分代年龄

b:锁,偏向锁,偏向ID

对象的访问定位

句柄

java栈本地变量表中 reference指向句柄,句柄指向实例数据和类型数据

reference存放的是稳定的句柄地址

对象移动只会改变句柄中的实例数据指针,不改变reference

直接指针访问

速度快

节省开销
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: