万隆的笔记 万隆的笔记
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
  • 大纲

  • 走近Java

  • 内存与垃圾回收

    • JVM内存结构图
    • 类加载子系统
    • 运行时数据区
    • 程序计数器(PC寄存器)
    • 虚拟机栈
    • 本地方法栈
    • 堆
    • 方法区
    • 对象的实例化
    • 直接内存
    • 执行引擎
    • String Table
    • 垃圾回收概述
    • 垃圾回收相关概念
    • 垃圾回收算法
    • 垃圾收集器
    • 对象访问
      • 句柄引用
      • 直接引用
      • 区别
    • 栈帧结构
  • 字节码与类加载

  • 性能监控与调优

  • 监控与性能调优案例

  • Java虚拟机
  • 内存与垃圾回收
2022-02-01
目录

对象访问

# 对象访问

Java语言中,对象访问是如何进行的? 最简单的访问,也会涉及到Java栈、Java堆、方法区三者之间的关联。

Object obj = new Object(); //出现在方法体中

“Object obj”这部分语义将反应到Java栈的本地变量表中,作为一个refrence类型数据出现。而“new Obeject”这部分语义反应到Java堆中,形成了存储Object类型实例所有数据值的结构化内存(根据具体的类型以及虚拟机实例不同,长度不固定)。此外,Java堆中还必须包含能查找到此对象类型数据(对象类型、父类、实现的接口、方法等等)的地址信息,这些类型数据存储在方法区中。

在JVM规范中只规定了refrence类型为一个指向对象的引用,而没有定义引用如何定位以及访问到Java堆中对象的方式(即栈定位并访问堆中对象信息的方式)。目前主流方式有两种:使用句柄和直接指针。

# 句柄引用

如果使用句柄访问,Java堆中会划分出一块内存作为句柄池,reference中存储的是对象的句柄地址,而句柄中包含了两个地址信息,分别是对象实例数据和类型数据地址信息。

句柄访问对象

# 直接引用

如果使用直接指针访问方式,Java堆对象的布局就要考虑如何放置访问类型数据的相关信息,reference直接存储的就是对象地址。

直接引用

# 区别

句柄引用和直接引用两种对象访问方式各有优势。

使用句柄引用的方式最大的优点是:reference中存储的是稳定的句柄地址,在对象被移动(GC时,移动对象是非常普遍的行为)时,只会改变句柄中的实例数据指针,而reference本身不需要被修改。

使用直接指针访问方式最大好处是速度更快,它节省了一次指针定位的时间开销,由于对象访问在Java中非常频繁,因此此类开销积少成多后也是一项非常可观的执行成本。

HotSpot采用直接引用的方式进行对象的访问。

上次更新: 5/28/2023, 10:57:53 PM
栈帧结构

栈帧结构→

最近更新
01
2025
01-15
02
Elasticsearch面试题
07-17
03
Elasticsearch进阶
07-16
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式