对Java中的对象、实例、句柄、直接指针的理解
2018-03-01 14:25
309 查看
虚拟机在创建对象的时候,会优先查询常量池中是否有该对象的实例,如果没有则需要加载、解析、初始化class,然后分配内存,初始化内存,设置对象(HASH CODE 、 GC年代等),最后执行init才算是创建完对象。
对象即实例。
String str;
以上的str就是一个句柄,但是并没有指向任何对象,好比这是一个客服中心,告诉你打400号码联系客服中心,但是没有指明是哪个客服人员,如果String str = "9527";这个时候就是说明了编号9527为您服务,可以通过句柄访问对象。
直接指针,我理解的:
class Test{
public void doSth();
}
new Test().doSth();//直接指针
Test() test = new Test();//句柄引用
test.doSth();
当然直接指针肯定是速度更快的,但是如果用句柄,对象被移动(比如GC),只需要改变指针而不会改变引用;如果是直接指针的方式,速度那是杠杠的,不用多余的一次指针的定位。综上,写JVM多用直接指针,写应用更多的是句柄。
对象即实例。
String str;
以上的str就是一个句柄,但是并没有指向任何对象,好比这是一个客服中心,告诉你打400号码联系客服中心,但是没有指明是哪个客服人员,如果String str = "9527";这个时候就是说明了编号9527为您服务,可以通过句柄访问对象。
直接指针,我理解的:
class Test{
public void doSth();
}
new Test().doSth();//直接指针
Test() test = new Test();//句柄引用
test.doSth();
当然直接指针肯定是速度更快的,但是如果用句柄,对象被移动(比如GC),只需要改变指针而不会改变引用;如果是直接指针的方式,速度那是杠杠的,不用多余的一次指针的定位。综上,写JVM多用直接指针,写应用更多的是句柄。
相关文章推荐
- 对象的访问定位:句柄与直接指针
- 深入理解java对象的创建过程,类的初始化与实例化
- 深入理解Java对象的创建过程:类的初始化与实例化
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- java关于静态与实例的区别和联系以及对象的理解。
- 深入理解Java对象的创建过程:类的初始化与实例化
- java中如何理解多个对象共享同一个静态成员变量(多个实例的static变量会共享同一块内存区域)
- objc直接通过指针访问对象实例变量
- 深入理解Java对象实例生成的例子!
- Java对象句柄(指针,引用地址)
- 运用实例理解java对象操作
- objc直接通过指针访问对象实例变量
- 深入理解Java对象实例生成的例子!
- 在java中怎么理解“用instanceof操作符判断父类对象是否为子类的一个实例”?
- iOS class深入理解: 实例对象、类对象、元类和isa指针
- 对象的访问定位:句柄与直接指针
- objc直接通过指针访问对象实例变量
- 【Java】【TIJ】实现一个类:不允许用构造方法来直接创建类实例(对象)
- JAVA中的指针,引用及对象的clone
- [学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容