美文网首页
JVM之对象定位与访问

JVM之对象定位与访问

作者: 官先生Y | 来源:发表于2016-12-19 18:00 被阅读81次
public class Demo1 {
    private void method() {
        A a = new A();
    }
}

简单说下上面代码实例化类A的内存分配情况,引用变量a保存在虚拟机栈中的本地变量表,该引用指向的对象实例数据保存在Java堆中。

现在有一个问题疑问就是:
Java程序通过栈中的引用来操作Java堆上的具体对象,那么虚拟机栈的本地变量表的引用怎么访问Java堆中的具体对象呢?

经过查阅资料可知,对象的访问方式取决于虚拟机的实现,并且主流访问方式有句柄池和直接指针。

句柄池

句柄池方式访问对象

Java堆中将会划出一块内存来作为句柄池,引用对象存储的就是对象的句柄地址。句柄中包含了对象实例数据和对象类型数据的具体地址。

直接指针

直接指针方式访问对象

对象实例数据包含了到对象类型数据的具体地址。

总结

这两种对象的访问方式各有优势,使用句柄访问方式的最大好处就是引用对象中存放的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的对象实例数据指针,而对象引用不需要修改。使用直接指针访问方式的最大好处是速度快,它节省了一次指针定位的时间开销。目前Java默认使用的HotSpot虚拟机采用的便是是第二种方式进行对象访问的。

相关文章

  • JVM

    JVM之内存模型JVM之对象定位与访问JVM之Java垃圾回收机制JVM之类加载

  • JVM之对象定位与访问

    简单说下上面代码实例化类A的内存分配情况,引用变量a保存在虚拟机栈中的本地变量表,该引用指向的对象实例数据保存在J...

  • JVM(八):Java 对象模型

    JVM(八):Java 对象模型 本文将学习对象是如何创建的,对象的内存布局,以及如何定位访问一个对象。 对象创建...

  • 深入Java虚拟机之 -- 总结面试篇

    一、JVM常见面试题 介绍下 Java 内存区域 Java 对象的创建过程 对象的访问定位有几种 String、S...

  • Java虚拟机之-JVM对象的访问

    Java虚拟机之-JVM对象的访问 Object obj=new Object(); “Object obj”这部...

  • Java内存区域

    主要面试题:介绍下Java内存区域Java对象创建的步骤(五步,需要知道JVM分别做了什么)对象访问定位的两种方式...

  • Java进阶 - JVM 内存管理机制探秘

    内容概述 JVM 运行时数据区概述 JVM 对象分配、布局与访问过程 GC机制与内存分配策略 主要以 HotSpo...

  • 对象访问定位

    对象访问定位 句柄 在Java堆划分一块内存作为句柄池,reference中存储的对象的句柄地址,句柄中包含对象实...

  • 【JVM】对象的创建、内存布局、访问定位

    仅讨论普通Java对象(不包括数组和Class对象)的创建。 对象的创建 主要分为以下几个步骤 1、检查对象对应的...

  • HotSpot源码结构

    java对象的访问定位

网友评论

      本文标题:JVM之对象定位与访问

      本文链接:https://www.haomeiwen.com/subject/pyctvttx.html