句柄
概念
句柄通俗来讲就是指针的指针。
如果使用句柄访问对象的话,会在JAVA堆中划出一部分内存作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据的各自具体的地址信息。
优缺点
优点:
- 当对象被移动时(比如GC时),只需更改句柄中的实例数据指针,而reference不需要改变。
这样做的好处是如果一个对象被多个reference所引用,那么当对象地址被修改时,只需更改一个句柄地址即可,而不需要更改多个reference。提高效率。
缺点:
- 定位对象时需要两次定位。
直接指针
概念
直接指针的好处就是速度快,它节省了一次指针定位的时间开销,由于对象访问在Java中是非常平凡的,因此这类开销积少成多也是一项极为可观的执行成本。
优缺点
优点:
- 定位速度更快
缺点:
- 当对象被移动时,所有指向该对象的reference都需要被改变,耗时。