精华内容
下载资源
问答
  • java对象这里指的是引用类型的对象,这里用Student stu = new Student()为例子访问,Student stu作为引用对象,存在java的虚拟机栈上,new ...主要的对象的访问方式有句柄访问和直接指针访问: 句柄访问 句柄访问主要是Ja...


    所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配的。也就是说在建立一个对象时两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。 那么根据引用存放的地址类型的不同,对象有不同的访问方式。

    句柄访问方式

    堆中需要有一块叫做“句柄池”的内存空间,句柄中包含了对象实例数据与类型数据各自的具体地址信息。
    引用类型的变量存放的是该对象的句柄地址(reference)。访问对象时,首先需要通过引用类型的变量找到该对象的句柄,然后根据句柄中对象的地址找到对象。
    在这里插入图片描述

    直接指针访问方式

    引用类型的变量直接存放对象的地址,从而不需要句柄池,通过引用能够直接访问对象。但对象所在的内存空间需要额外的策略存储对象所属的类信息的地址。
    在这里插入图片描述
    需要说明的是,HotSpot 采用第二种方式,即直接指针方式来访问对象,只需要一次寻址操作,所以在性能上比句柄访问方式快一倍。但像上面所说,它需要额外的策略来存储对象在方法区中类信息的地址。

    展开全文
  • 1.句柄访问 2.直接指针

    1.句柄访问 

    2.直接指针

     

    展开全文
  • a)对象头包含运行时元数据类型指针。运行时元数据包含哈希值(这个哈希值就是创建出来的对象在内存中的地址)、GC分代年龄、锁状态标志等。类型指针,指向方法区(元空间)中对象所属的类型。如果创建的是数组,对象...

    1.对象的内存布局

    在这里插入图片描述
    1.整体上来看,对象在内存中有3部分,对象头、实例数据、对齐填充。
    a)对象头包含运行时元数据和类型指针。运行时元数据包含哈希值(这个哈希值就是创建出来的对象在内存中的地址)、GC分代年龄、锁状态标志等。类型指针,指向方法区(元空间)中对象所属的类型。如果创建的是数组,对象头还会保存数组的长度。
    b)实例数据。类中定义的成员变量。规则:先放父类的成员变量,在放子类的成员变量。相同宽度的变量被放在一起。如果compactFileds参数为true,子类的窄变量可能插入到父类变量的空隙。
    c)对齐填充
    2.如下图所示,比较详细的解释了对象的内存布局以及它和栈、方法区之间的联系。
    虚拟机栈中保存的是一个个栈帧,栈帧中是一个个成员变量,其中cust成员变量指向了堆空间中创建的Customer()实例,对象实例包含对象头、实例数据、以及对齐填充。
    其中对象头又包含运行时元数据、类型指针;运行时元数据包含哈希值、GC分代年龄、锁状态标志等;类型指针指向方法区中Customer对象的类型信息。
    实例数据包含的是类Customer中定义的成员变量信息。其中name是一个字符串常量,指向了字符串常量池中的字符串常量(注意,字符串常量池在JDK7就已经被移动到了堆区);acct是一个对象的引用,又指向了一个堆区中新的对象。
    最后一部分对齐填充,主要是为了内存字节对齐。

    在这里插入图片描述

    2.对象的访问定位

    在这里插入图片描述
    对象访问的方式有两种:句柄访问和直接指针。
    1.句柄访问。
    Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息。
    在这里插入图片描述
    2.直接指针(HotSPot虚拟机采用)。
    reference中直接存储的就是对象地址,对象中存储了到对象类型的类型指针。
    在这里插入图片描述
    优缺点:
    1.使用句柄的方式,需要开辟一块独立的空间给句柄池;同时访问对象效率较低,需要通过两次指针。句柄稳定,对象被移动只要修改句柄中的地址。
    2.使用直接指针的方式,访问速度快,节省了一次指针定位的开销

    更多JVM文章请访问我的JVM专栏:
    https://blog.csdn.net/u011069294/category_10113093.html

    展开全文
  • 主流的对象访问方式有句柄和直接指针两种 句柄访问: java堆中可能会划出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自具体的地址信息 好处:reference...

    java程序会通过栈上的Reference数据来操作堆上的具体对象。主流的对象访问方式有句柄和直接指针两种

    句柄访问:

    java堆中可能会划出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自具体的地址信息

    好处:reference存储的是稳定的句柄地址,在对象被移动(回收)时只会改变句柄的实例数据指针,而reference不需要被修改

     

     

    直接指针:

    reference中存储1的直接就是对象地址,如果访问的对象是本身的话,就不需多一次间接访问的开销

    好处:快!!!三秒真男人

    展开全文
  • java 对象访问的方式有两种:句柄访问和直接访问。 句柄访问:在堆内存中划分一个区域存放句柄池,java 栈中存储的refrence 指向的就是句柄池的地址,句柄池里存放的是java 对象实例的地址,java 类型数据的具体...
  • 目前主流的访问方式有使用句柄和直接指针两种。 如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中 存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址...
  • 访问对象两种方式--句柄和直接指针

    千次阅读 2018-04-26 16:43:50
    并没有定义这个引用应该通过哪种方式去定位,以及访问到Java堆中的对象的具体位置,因此不同虚拟机实现的对象访问方式会有所不同,主流的访问方式有两种:使用句柄和直接指针。1、使用句柄访问方式如果使用句柄访问...
  • 对象的访问定位:句柄直接指针

    千次阅读 2016-04-28 16:53:04
    主流访问方式有句柄和直接指针两种句柄方式Java堆中将会划出一块内存来作为句柄池,reference对象存储的就是对象的句柄地址。句柄中包含了对象实例数据类型数据的具体地址:直接指针方式reference对象直接存储对象...
  • 目录 句柄 直接指针 概念详解思维导图 句柄 直接指针 概念详解思维导图
  • 2.3 HotSpot虚拟机对象2.3.1 对象的创建1 类加载检查2 为新生对象分配内存分配方式3 分配内存的并发问题4 初始化5 对象头设置6 执行init方法2.3.2 对象的内存布局1对象头2 实例数据2 对齐填充2.3.3 对象的访问定位1 ...
  • java对象在访问的时候,...目前主流的访问方式有通过句柄和直接指针两种方式。 1.句柄 使用句柄访问方式,java堆将会划分出来一部分内存去来作为句柄池,reference中存储的就是对象的句柄地址。而句柄中则包含...
  • 使用句柄访问,Java堆中将可能会划分出一块内存用来作为句柄池,reference中寸的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自具体的地址信息。 具体结构如图: 使用直接指针访问(常用) 使用直接...
  • 建立对象是为了使用对象,我们的Java程序需要通过栈上的reference引用来操作堆上的具体对象。...目前主流的访问方式有使用句柄和直接指针两种。 什么是句柄 句柄是指针的指针,句柄实际上是一个数据,是一个L...
  • 1.通过句柄访问对象 句柄: 如果使用句柄的话,那么 Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。 优点:...
  • 两种方式各有优劣,使用句柄访问的好处是在每次对象位置发生变动时只需要改变句柄中指向实例数据的指针,而指向对象类型数据的指针和对象引用指针reference都不需要修改,而使用直接指针访问,当对象发生移动时对象...
  • 建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的具体对象。...目前主流的访问方式有使用句柄和直接指针两种。(1)通过句柄访问对象 优点:reference存储的是稳定的
  • 并没有定义这个引用应该通过哪种方式去定位,以及访问到Java 堆中的对象的具体位置,因此不同虚拟机实现的对象访问方式会有所不同,主流的访问方式有两种:使用句柄和直接指针。 (1)如果使用句柄访问方式,Java...
  • 句柄和指针的区别

    2018-07-17 16:26:53
    这是初学者最常问及的问题,一些面试官也很喜欢问这个问题 。 当把硬盘上的资源调入内存以后,将有一个句柄指向它,但是句柄只能指向一个资源。而且句柄知道所指的内存有多大。还有指针指针指向地址...它通常意...
  • 句柄和指针

    千次阅读 2006-09-01 19:13:00
    有关句柄和指针的常用函数1. 如何获取应用程序的 实例句柄? AfxGetInstanceHandle() 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用 AfxGetInstancdHandle获得句柄. Example: HANDLE hInstance=...
  • 引用、指针和句柄的区别

    万次阅读 多人点赞 2020-12-15 08:38:00
    句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由...
  • 指针和句柄

    2016-07-26 18:24:11
    因为windows的内存管理经常会将当前空闲对象的内存释放掉,当需要时访问再重新提交到物理存储,所以对象的物理地址是变化的,不允许程序直接通过物理地址来访问对象。程序将想访问的对象的句柄传递给系统,系统根据...
  • 指针和句柄的区别

    2018-07-06 15:18:39
    句柄并没有直接指向资源对象,而是保存着一个资源对象在资源注册列表中的索引,也就是说,句柄是间接指向资源对象的。资源对象加载到内存时需要将首地址在资源列表中进行注册,注册后无论该资源对象的地址是...
  • 指针、引用和句柄

    2014-10-16 22:23:22
    (3)句柄指针指针句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样。Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,542
精华内容 23,816
关键字:

句柄访问和直接指针