如何在内存中查找对象的起始地址呢?

在Java虚拟机规范中规定了也只规定了一个指向对象的引用

并没有规定如何去实现这个引用

所以常见的实现方式分为了使用句柄和直接指针两种

句柄引用:在Java堆中划分出一块内存来作为句柄池

reference中存储的就是对象的句柄地址,句柄中分别保存了对象的实例数据和类型数据

图片

这种方式占用了额外的内存空间,但是更利于修改各种类型的数据

直接指针则是

reference中存储的是对象地址

图片

具体存储类型数据则没有完全规定

直接指针的方式更加利于查找速度,常见的HotSpot就是基于第二种方式直接指针的引用保存

发表评论

邮箱地址不会被公开。 必填项已用*标注