今天来看一个class的实例在JVM中的内部表示。
先看下面的简图。
这是对应的代码。
class instanceKlass: public Klass {
// ...
protected:
objArrayOop _methods;
objArrayOop _local_interfaces;
typeArrayOop _fields;
constantPoolOop _constants;
typeArrayOop _class_annotations;
// ...
};
类似的代码还有不少,这里选取了最典型的:方法、接口、字段、常量、Annotation。
因为一个class实例可能会有多个方法(接口、字段、常量、Annotation),所以
objArraryOop、typeArrayOop、constantPoolOop均是“数组”(vector)。
下面简单谈谈Oop和Klass之间的关系。
一个class的信息是由Oop和Klass共同来表达。
Oop是一个指针
typedef class oopDesc* oop;
C++ class oopDesc保存了java class的元数据信息,而Klass保存了java class的实际数据。
简单地说,Oop是Klass的元数据。
为了表达不同的类型,Oop和Klass各自有对应的派生类。
oop的派生
分享到:
相关推荐
使用`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启动时或者类运行时将需要的class加载到JVM中 * 执行引擎,执行引擎的任务是负责执行class文件中包含的字节码指令,相当于实际机器上的CPU * 内存区,将内存划分成若干个区以模拟实际机器上的存储...
在这个压缩包中,"JVM图解.png"可能是对JVM内部结构的可视化表示,"JVM图解"可能是一个详细的文档,解释了JVM的工作原理,而"JVM指令手册 中文版"则提供了JVM可执行的所有指令的详细信息。下面,我们将深入探讨JVM的...
在典型的 JVM 实现中,存在一个简单的 CPU 架构模型,包括以下几个主要部分: - **PC(Program Counter)**:程序计数器,用于记录当前正在执行的指令的位置。 - **Operand Stack Pointer**:操作数栈指针,用于...
在JVM的工作过程中,运行时数据区(也称为Java堆内存)是另一个重要的概念。它分为以下区域: - **堆**:存储所有实例对象和数组。Java垃圾收集器负责管理堆内存,进行对象创建和销毁。 - **栈**:每个线程都有...
冯立全在分享中重点介绍了JVM运行机制,尤其强调了运行时数据区域的布局、Class文件的结构、字节码技术、类加载机制以及垃圾回收算法等核心内容。 运行时数据区域是JVM内存模型的核心,它被划分为若干部分,主要...