java的GC机制--java对象的访问方

一般来说,一个java的引用访问涉及到三个内存区域:JVM栈、堆、方法区;

以最简单的本地变量引用为例: Object obj = new Object();

    Object obj是一个本地引用,存储在JVM栈的本地变量表中,表示一个reference类型的数据;

    new Object()作为一个实例对象,存储在堆区中

    堆中还记录了Object类的类型信息(接口、field、方法、对象类型等)的地址,这些地址所执行的数据存储在方法区中。在java虚拟机规范中,对于通过reference类型引用具体对象方式并未做规定,目前主流的实现方式有两种:

    1、通过句柄访问


通过句柄访问的实现方式中,JVM堆中会有一块区域作为专门的句柄池,储存相关句柄池所执行的实例数据地址(包括在堆中的地址和方法区中的地址)。这种实现方法由于用句柄表示地址,应此十分稳定。

  2、通过直接指针访问:


通过直接指针访问的方式中,reference中直接储存的就是对象在堆中的实际地址,在堆中储存的信息还包括在方法区中相应类型数据。这种方法最大的优势就是速度快,在HotSpot虚拟机中就是采用的这种方式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值