JVM笔记2:对象访问

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,句柄,堆中将会划分出来一块区域作为句柄池

JVM笔记2:对象访问_第1张图片

2,指针
JVM笔记2:对象访问_第2张图片

2种方式各有优势,但是可以看到指针方式明显节省了一次指针定位时间,速度更快,Sun的HotSpot使用的是指针方式

转载于:https://www.cnblogs.com/sean-zou/archive/2013/04/30/3710065.html

你可能感兴趣的:(JVM笔记2:对象访问)