Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(三)

简介: 本文内容总结自周志明先生所编著的《深入理解Java虚拟机-JVM高级特性与最佳实践》此书的经典不必多说。本节内容是对象的定位访问。 在java中我们无时无刻不在创建对象,我们创建对象的目的当然是为了使用它了。但是我们怎么才能使用操作创建的对象呢?我们的java程序会通过栈上的reference数据(指向对象的引用)来操作堆上的具体对象。那这个对象的引用是通过什么方式去定位、访问堆中的对象

本文内容总结自周志明先生所编著的《深入理解Java虚拟机-JVM高级特性与最佳实践》此书的经典不必多说。本节内容是对象的定位访问。

在java中我们无时无刻不在创建对象,我们创建对象的目的当然是为了使用它了。但是我们怎么才能使用操作创建的对象呢?我们的java程序会通过栈上的reference数据(指向对象的引用)来操作堆上的具体对象。那这个对象的引用是通过什么方式去定位、访问堆中的对象的具体位置呢?目前主流的访问方式大概有以下两种:使用句柄和直接指针两种方式。

使用句柄:

如果是使用句柄的方式访问对象的话,就需要在java堆中划出一块内存作为句柄池,而reference(对象引用)中存储的就是对象的句柄地址。在这个句柄中包含了对象实例数据类型与类型数据各自的具体地址信息。如下图所示(仔细观察本地变量表中的东西看看有什么发现):

直接指针

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

使用句柄访问对象的最大好处是reference中存储的是稳定的句柄地址,在对象被移动(比如垃圾回收的时候)时只会改变句柄中实例数据的指针。使用直接指针访问的最大好处是速度快,因为它节省了一次指针定位的时间开销(如上图所示). 在HotSpot虚拟机中它是采用直接指针来进行对象的访问的

相关文章
|
14小时前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
1天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
1天前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
9 3
|
1天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
13 3
|
1天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
13 3
|
7天前
|
网络协议 Linux 网络安全
虚拟机Vmware详细安装(包含kali,win7与winxp三系统相互ping与安装)
本文是一篇关于虚拟机安装和配置的教程,包括使用VMware安装虚拟机和在虚拟机中安装Kali Linux、Windows 7和Windows XP系统。作者提供了详细的步骤和截图说明,指导读者如何下载和安装VMware,以及如何从提供的链接下载预配置的操作系统镜像文件。安装过程中,重点介绍了如何选择安装路径、接受许可协议、启动安装过程,并强调了不要勾选某些选项以保持默认设置。此外,还提到了如何在虚拟机中配置网络,确保三个系统在同一网段并能互相ping通。最后,作者布置了一些练习,如熟悉操作系统的使用、获取IP地址和互相通信,以及鼓励读者享受学习网络安全的过程。
56 9
|
12天前
|
存储 Linux 虚拟化
虚拟机(vmware)中安装linux系统
虚拟机(vmware)中安装linux系统
|
17天前
|
程序员 Linux KVM
【qemu虚拟化】将img镜像文件转换为VMware虚拟机
QEMU是一个开源的硬件虚拟化器,能在多种平台如x86、ARM、PowerPC上运行,支持虚拟化不同体系结构的操作系统。它具有硬件仿真、虚拟化支持、磁盘和网络仿真、快照回滚及可扩展性等特点。要使用QEMU,首先从[官网](https://www.qemu.org/download/)下载,然后通过命令行运行进行转换。转换后的vMDK文件可在VMware中导入,创建新的虚拟机进行使用。
80 1
【qemu虚拟化】将img镜像文件转换为VMware虚拟机
|
25天前
|
虚拟化
设备管理中的虚拟机vmware网卡异常
设备管理中的虚拟机vmware网卡异常
|
1月前
|
虚拟化
【虚拟机】VMware 扩展硬盘大小提示 指定的虚拟磁盘需要进行修复
【虚拟机】VMware 扩展硬盘大小提示 指定的虚拟磁盘需要进行修复