`

JVM学习笔记(二):JVM中对象访问的两种方式

 
阅读更多

由于Reference类型在Java虚拟机规范里面只规定了一个指向对象的引用,并没有定义这个引用应该通过哪种方式去定位,以及访问到Java堆中的对象的具体位置,因此不同虚拟机实现的对象访问方式会有所不同,主流的访问方式有两种:使用句柄和直接指针:

如果使用句柄访问方式,Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息如下图所示:

通过句柄方式访问对象

 

如果使用直接指针访问方式,java堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,reference中直接存储的就是对象地址。如下图所示:

通过直接指针方式访问对象

 

 

这两种对象的访问方式各有优势,使用句柄访问方式的最大好处就是reference中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指针,而reference本身不需要被修改。

使用直接指针访问方式的最大好处就是速度更快,它节省了一次指针定位的的时间开销。

分享到:
评论

相关推荐

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    JVM学习笔记

    ### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...

    jvm笔记

    其中,常量池是类文件中最重要的一部分,它包括了两种信息:字面常量和符号引用。 字面常量包括了整数、长整数、字符串等类型,而符号引用则包括了方法的描述、字段的描述等信息。在 JVM 中,方法的描述包括了方法...

    JVM历史发展和内存回收笔记

    二、JVM内存回收机制 1. **堆内存**:所有对象都在堆内存中分配,包括实例变量和数组。Java的垃圾回收主要关注堆内存的管理。 2. **垃圾回收算法**: - **标记-清除(Mark-Sweep)**:首先标记出所有活动对象,...

    深入Java虚拟机JVM类加载学习笔记

    ### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...

    Java学习笔记

    ### Java学习笔记知识点详解 ...以上是关于Java学习笔记中的一些核心知识点的总结,包括环境配置、基础知识、流程控制、面向对象编程和内存管理等方面的内容。这些知识点对于初学者理解和掌握Java编程语言至关重要。

    java基础(超详细。。学习笔记) 公司内部资料!保密哦!!!

    本篇学习笔记将深入探讨Java的基础概念,主要包括初始化、数据类型、对象、变量类型、集合类、泛型、垃圾回收、方法重载与重写以及static关键字。 首先,初始化是程序执行的起点,涉及到变量的分配和设定初始值。在...

    《JVM从入门到入魔》笔记.pdf

    编译型语言与解释型语言是编程语言的两种主要类型。编译型语言(如C、C++、Go)在运行前通过编译器将源代码一次性编译成机器码,生成可直接运行的程序,其执行速度快,但跨平台性较差。解释型语言(如Python、...

    java se学习笔记

    - **线程的创建**:通过Thread类和Runnable接口两种方式创建线程。 - **线程同步**:synchronized关键字,wait(), notify(), notifyAll()方法,以及死锁的概念。 8. **网络编程**: - **Socket编程**:TCP和UDP...

    Java公司培训经典学习笔记

    - **线程创建**:通过Thread类和实现Runnable接口两种方式创建线程。 - **同步机制**:synchronized关键字,wait()、notify()和notifyAll()方法,以及死锁的理解和避免。 - **线程池**:ExecutorService、...

    良葛格Java学习笔记

    以上内容是“良葛格Java学习笔记”中的核心知识点,通过深入学习和实践,可以帮助读者建立起坚实的Java基础,进一步提升编程技能。其中,ch01.pdf可能详细介绍了Java的基础知识,而ch02.pdf可能涵盖了更高级的主题,...

    java超强学习笔记

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而闻名。"Java超强学习笔记"显然是一份全面且深入的Java学习资料,由一位极具洞察力和组织能力的作者精心编纂。这份笔记可能包含了从基础...

    OpenRASP学习笔记 .pdf

    OpenRASP通过插入到应用程序的JVM中,利用JVM Tool Interface (JVM TI) 接口,能够在应用程序运行过程中动态监控和分析代码行为,从而及时发现并阻止恶意攻击。 1. **JVM TI接口**: JVM TI是Java虚拟机工具接口,...

    Java基础学习笔记

    这两种声明方式在Java中是等价的。 - Java是强类型语言,需要在使用变量之前进行声明,并指定变量的数据类型。数组的长度是固定的,并且通过length属性来获取。 - 对于二维数组,可以先定义行再定义列。在二维数组...

    Java学习笔记精彩版.doc

    本文档是 Java 学习笔记的精彩版,涵盖了 Java 的基础知识,包括 Java 的跨平台性、安全性、面向对象编程、动态更新、简朴性等特点,以及 Java 开发平台的搭建、环境变量的设定、Java 运行过程等。 一、Java 的优势...

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

    Jack_《JVM从入门到入魔》笔记.pdf

    Java语言则处于这两种类型之间,它首先通过javac编译器将源代码编译成字节码,然后在JVM中执行。JVM既有解释器也有编译器(JIT,Just-In-Time Compiler),它会动态地将部分字节码编译为机器码以提高运行效率,这...

    学习笔记之java虚拟机

    - 分配内存的方式有两种:指针碰撞和空闲列表。 - 在并发环境下,内存分配可能会采用CAS+失败重试或本地线程分配缓冲(TLAB)机制来保证安全性。 - **对象的内存布局**: - 包括对象头、实例数据和对齐填充三部分...

Global site tag (gtag.js) - Google Analytics