JVM - 对象访问

转载 2016年05月31日 23:26:22

对象访问会涉及到Java栈、Java堆、方法区这三个内存区域。

如下面这句代码:

    Object objectRef = new Object(); 

假设这句代码出现在方法体中,”Object objectRef” 这部分将会反映到Java栈的本地变量中,作为一个reference类型数据出现。 而“new Object()”这部分将会反映到Java堆中,形成一块存储Object类型所有实例数据值的结构化内存,根据具体类型以及虚拟
机实现的对象内存布局的不同,这块内存的长度是不固定。另外,在java堆中还必须包括能查找到此对象类型数据(如对象类型、
父类、实现的接口、方法等)的地址信息,这些数据类型存储在方法区中。
reference类型在java虚拟机规范里面只规定了一个指向对象的引用地址,并没有定义这个引用应该通过那种方式去定位,访问到
java堆中的对象位置,因此不同的虚拟机实现的访问方式可能不同,主流的方式有两种:使用句柄和直接指针。

句柄访问方式:java堆中将划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息。
这里写图片描述
指针访问方式:reference变量中直接存储的就是对象的地址,而java堆对象一部分存储了对象实例数据,另外一部分存储了对象类型数据。
这里写图片描述

这两种访问对象的方式各有优势,使用句柄访问方式最大好处就是reference中存储的是稳定的句柄地址在对象移动时只需要改变句柄中的实例数据指针,而reference不需要改变。使用指针访问方式最大好处就是速度快,它节省了一次指针定位的时间开销,就虚拟机而言,它使用的是第二种方式(直接指针访问)。
原文链接

相关文章推荐

JVM-JAVA对象的访问

JAVA中对象的访问     JAVA是面向对象的语言,那么在JAVA虚拟机中,存在非常多的对象,对象访问是无处不在的。即时是最简单的访问,也会涉及到JAVA栈、JAVA堆、方法去这三个非常重要的内存...

JVM里java对象的创建及内存分配和访问定位

对象的创建 Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文...

JVM内存管理-对象访问

程序运行时,最基本的需要使用jvm中的栈、堆、方法区,这三部分内容。 栈,存放了方法所需要的局部变量等信息。 堆,存放了类的实例化数据(即对象)。 方法区,存放了类的相关信息(class文件的信...

深入理解JVM : Java堆中对象创建、布局、访问全过程

一、对象的创建new Animal();1.类加载检查:检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的...

JVM学习02——对象的创建与访问

本文将简单介绍HotSpot虚拟机在Java堆中对象的创建和访问。一、对象的创建public class Test{ public static void main(String[] a...
  • xu__cg
  • xu__cg
  • 2016年10月24日 16:44
  • 393

深入JVM之Java对象访问模式

深入JVM之Java对象访问模式Java的引用类型是最为重要的数据处理模型,而整个的引用数据类型数据处理之中会牵扯到:堆内存、栈内存、方法区。下面以一个最简单的程序代码为主:“Object obj=n...

JVM笔记2:对象访问

java中对不同位置创建的对象的访问方式是不同的 1,方法中创建的对象 public class Test { public void instanceObj(){ Object obj = n...

深入理解JVM02--深入理解对象的创建、内存布局、访问定位

对象的创建   Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:克隆、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(本...

JVM(4)——对象访问

一、对象创建过程 在Java语言中,对象是如何访问的呢?对象访问在Java语言中无处不在,是最普通的程序行为,但即使是最简单的访问,也会涉及Java虚拟机栈、Java堆区、方法区。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JVM - 对象访问
举报原因:
原因补充:

(最多只允许输入30个字)