java中访问对象的两种方式
当在堆内存中创建对象之后,java程序需要refrence数据来操作对象。由于reference类型在java虚拟机规范中只规定了指向对象的引用,并没有规定这个引用以如何的方式去定位、访问堆中的对象具体位置。访问方式取决于虚拟机的实现,主要有两种方式,分别是句柄和直接指针。
其中Reference是java中的引用类,它主要是对普通对象进行包装,从而在JVM在垃圾回收时,按照引用类型的不同,在回收时采用不同的逻辑。
1. 句柄
使用句柄方式访问兑对象时,需要在堆中划出一部分内存作为句柄池,句柄池中存放各个对象的句柄,句柄包含了队形实例数据和对象类型数据的具体地址信息,而reference中存储的则是对象的句柄地址。
2. 直接指针
使用直接方式访问对象时,堆中对象存放的是对象的实例数据和指向对象类型数据的指针,reference则存储的是对象地址。
3. 两种方式的对比
总而言之,两种访问对象的方式各有优势。句柄方式比较稳定,执行成本较高;直接指针方式速度更快,执行成本较低。