java中对不同位置创建的对象的访问方式是不同的
1,方法中创建的对象
public class Test {
public void instanceObj(){
Object obj = new Object();
}
...
}
1,Object obj这一部分的数据将会反映到java栈的本地变量表中,作为一个reference类型的数据存在
2,new Object这一部分将会被反映到java堆中,形成一块存储了Object类型实例数据值(实例数据:对象中各个实例字段的数据)的结构化内存
事实上这并不是绝对的,Java运行时优化有一项为栈上分配:为了提高运行效率,在栈上分配对象的部分或全部属性存储空间,这点在Java运行期优化中会详细说明
3,一些与该对象相关联的其它信息,例如对象类型、父类、接口、方法等等,这些信息存储在虚拟机的方法区中
(2、3 -> 对象中的数据+对象特征=一个完整的对象)
reference类型在jvm规范中之规定了一个指向对象的引用,并未定义该引用通过哪种方式去定位其所访问的处于java堆中的对象,主流方式有2种:
1,句柄,堆中将会划分出来一块区域作为句柄池
2,指针
2种方式各有优势,但是可以看到指针方式明显节省了一次指针定位时间,速度更快,Sun的HotSpot使用的是指针方式