Java对象的创建及访问
来源:互联网 发布:java代码调用ant出错 编辑:程序博客网 时间:2024/05/06 20:11
在Java中创建对象只是一个new关键字而已,如 Object Obj=new Object();但是在虚拟机中,这是一个复杂的过程。整个对象的创建分为四步。
第一步:加载类。
Java虚拟机遇到一条new指令时,先去检查这个指令的参数(即:类名)是否能在常量池中定位到这个类的符号引用,并检查这个符号所代表的类是否已经备加载、解析和初始化(参见Java类的加载过程)。如果类没有被加载,必须先执行类的加载过程。
第二步:分配内存。
在类加载检查通过后,虚拟机讲为新的对象分配内存。所分配的内存的大小由类的加载过程中确定。这块内存被分配在Java堆中。内存分配完成后虚拟机将分配到的所有内存空间都初始化为零(之所以全部初始化为零,是为了保证对象的实例字段在Java代码中可以不赋初值直接使用)。
第三步:设置参数。
接下来虚拟机需要对对象进行必要的设置。如这个对象属于哪个类的实例,如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等。这些信息存放在对象的对象头中。
第四步:初始化。
从虚拟机的视角,一个新的对象已经产生,但是从Java程序的视角来看对象的创建才刚刚开始。还需要对对象执行init方法。
在创建完对象之后就需要对对象进行访问。
Java程序通过栈上的reference数据来操作堆上的具体对象。reference时一个指向对象的引用。
目前主流的访问方式有使用句柄和直接指针两种。
1、使用句柄。
Java堆中hi划分出一块内存作为句柄池,reference中存储的就是对象的句柄地址。句柄中抱恨了对象实例数据与类型数据各自的具体地址。
使用句柄访问的最大好处就是reference中存储的是稳定的句柄地址,在对象被移动是只会改变句柄中的实例数据指针,而reference本身不需要改变。
使用直接访问的最大好处就是快,节省了一次指针定位的开销。
- Java对象的创建及访问
- java对象的创建及访问定位
- JavaScript中对象的创建及访问
- java虚拟机------对象的创建与访问
- Java对象的创建,布局,访问
- Java之对象的创建、访问
- Java对象的创建、访问和定位
- JVM里java对象的创建及内存分配和访问定位
- Java中的内存区域及对象的创建、内存布局与访问定位
- Java基础:第三十讲 对象的创建和访问
- Java虚拟机中对象的创建、存储、访问定位。
- Java对象的创建、内存布局、访问定位
- 反射 创建对象及访问构造方法
- JAVA中对象的创建、对象的内存布局、对象的访问定位
- Java匿名内部类的创建及访问域
- java对象的访问
- java多线程编程2--对象及变量的并发访问
- java多线程编程3--对象及变量的并发访问
- JMS之ActiveMQ
- 黑马程序员——IO(2)
- ocp-202
- 今天终于把perl写出来了
- android 4.4删除短信
- Java对象的创建及访问
- UISearchBar 自定义UI
- 初始化(1)--列表初始化和默认初始化
- git简介
- 认识Servlet
- ocp-203
- Java创建Oracle数据库连接池
- 【操作系统学习笔记】线程篇
- SAP RFC教程