栈中对象引用指向堆内存的方式
在我们用new创建对象的时候,例如 Person p = new Person();其中栈中的p指向堆内存中的 new Person()的方式有两种:
- 直接指向(Hotspot采用)
变量 p 直接指向 堆中实例数据 对象保存方法区 类型数据指针,直接的访问实例数据
- 句柄池
变量 p 保存了指向句柄池的指针,由句柄池中的实例数据和类型数据指针,间接的访问实例和类型数据
总结: - 直接指向
当堆内存中的对象实例在进行垃圾回收时,地址会发生变动,我们需要改变栈中的引用,但访问对象只需要经过一步 - 句柄池
当堆内存中的对象实例在进行垃圾回收时,地址会发生变动,这时我们只需改变句柄池中的引用不用去栈中修改,但访问对象需要经过两步