除了oop和Klass之外还有一个重要的数据结构Handle
oop和Klass的定义都在\hotspot\src\share\vm\oops目录下,
而Handle的定义则在\hotspot\src\share\vm\runtime目录下。
Handles.hpp、Handles.inline.hpp、Handles.cpp是定义Handle的源文件。
从其所在的目录runtime就可以推知Handle更多的是和运行时相关了。
因为有不同的oop,也就有对应的Handle。
例如
oop <===> Handle
methodOop <===> methodHandle
instanceOop <===> instanceHandle
Handle的定义中利用了C++的操作符重载,它重载了()和->这两个操作符。
重载操作符(),是为了是Handle本身类似一个函数指针。
例如:Handle h;那么就可以写 oop p = h();这也是由Handle获得oop的标准方式。
重载操作符->是为了简化通过Handle调用oop上方法的步骤。
例如: Handle h; h->function();那么该funciton实际上是oop所持有的方法。
h->function() <==> (h())->function();
在定义各个子类Handle的时候,又使用了宏DEF_HANDLE和DEF_KLASS_HANDLE。
这两个宏写的很容易懂,就不费笔墨了。
分享到:
相关推荐
当我们谈论“class的实例在JVM中的内部表示”时,我们实际上是在讨论Java虚拟机(JVM)如何存储和管理这些类的元数据。`instanceKlass`是HotSpot JVM中的一个核心概念,它是类的内部表示形式,包含了类的所有结构...
使用`ToolProvider.getSystemJavaCompiler()`方法可以获取到当前JVM中的Java编译器实例。 2. **构建诊断监听器**: 编译过程中可能产生错误或警告,我们需要一个`DiagnosticListener`来接收这些信息。你可以实现`...
Java程序的运行依赖于类加载器将`.class`文件加载到JVM中,并对其进行验证、准备和解析等步骤,最终使类能够在JVM中执行。 #### 三、Class文件的加载过程 Java类的加载过程主要可以分为以下几个阶段: 1. **加载...
在Java开发中,JVM(Java Virtual Machine)是运行所有Java程序的核心,它负责解析字节码并执行。为了确保应用程序高效稳定地运行,开发者需要对JVM进行监控,了解其内部状态,如内存使用、线程活动等。本文将探讨...
在本篇文章中,我们将深入探讨JVM如何处理.class文件,以及相关工具如何帮助我们理解这个过程。 首先,当我们谈论"jvm解析编译过的class文件"时,我们要知道,Java源代码(如TestClass.java)通过Java编译器(javac...
要查看JVM中的线程信息,可以使用`ThreadMXBean`的静态工厂方法`ManagementFactory.getThreadMXBean()`获取实例,然后调用相关方法。以下是一个简单的示例代码(参考文件`ThreadAction.java`): ```java import ...
3. **类的命名空间及运行时包**:类的命名空间是指在JVM中每个类都有唯一的标识符,防止命名冲突。运行时包则是在类加载过程中动态确定的包名,它可能与编译时指定的包名不同。 4. **类的卸载**:当一个类不再被...
介绍JVM中对多线程锁的实现。 第十课 class文件结构 ASM库介绍 介绍JVM规范中的最重要的内容——Class文件结构,同时介绍ASM库的使用以及对class文件的修改。 第十一课 字节码执行 案例以及javap JIT及相关参数 ...
在生产环境中进行JVM(Java Virtual Machine)调优是确保应用程序高效、稳定运行的关键步骤。JVM调优涉及多个方面,包括内存配置、垃圾收集器选择、线程设置、类加载机制优化等。这里我们将详细探讨这些关键知识点,...
当我们谈论"jdk,jvm源码"时,我们主要关注的是JVM的内部工作机制以及如何通过源码来理解这个过程。 JVM的运行机制主要包括以下几个关键部分: 1. 类加载子系统:负责加载、验证、解析和初始化.class文件。加载阶段...
3. **方法区**:存储类信息、常量、静态变量等,也称为永久代,在现代JVM中通常被元空间(Metaspace)替代。 ### 垃圾收集(Garbage Collection) JVM自动进行内存清理,防止内存泄漏。垃圾收集器主要有串行、并行...
在这个压缩包中,"JVM图解.png"可能是对JVM内部结构的可视化表示,"JVM图解"可能是一个详细的文档,解释了JVM的工作原理,而"JVM指令手册 中文版"则提供了JVM可执行的所有指令的详细信息。下面,我们将深入探讨JVM的...
在JVM的工作过程中,运行时数据区(也称为Java堆内存)是另一个重要的概念。它分为以下区域: - **堆**:存储所有实例对象和数组。Java垃圾收集器负责管理堆内存,进行对象创建和销毁。 - **栈**:每个线程都有...
* 类加载器,在JVM启动时或者类运行时将需要的class加载到JVM中 * 执行引擎,执行引擎的任务是负责执行class文件中包含的字节码指令,相当于实际机器上的CPU * 内存区,将内存划分成若干个区以模拟实际机器上的存储...
在典型的 JVM 实现中,存在一个简单的 CPU 架构模型,包括以下几个主要部分: - **PC(Program Counter)**:程序计数器,用于记录当前正在执行的指令的位置。 - **Operand Stack Pointer**:操作数栈指针,用于...
冯立全在分享中重点介绍了JVM运行机制,尤其强调了运行时数据区域的布局、Class文件的结构、字节码技术、类加载机制以及垃圾回收算法等核心内容。 运行时数据区域是JVM内存模型的核心,它被划分为若干部分,主要...