jvm主要功能模块
hotspot/src/share/vm/runtime/init.cpp line:90 init_globals()
HandleMark:为线程做标记,便于删除相应范围的handle
1、management_init(主要是进行各种计数的处理) 管理内存、线程、垃圾回收等,内部初始化了 线程服务、运行时服务、类加载服务
2、bytecodes_init 建立好字节码相关的表结构,便于后面利用查表实现相应的逻辑
3、classLoader_init 统计class,维护classpath、class与字节码等之间的映射关系
4、codeCache_init(); 缓冲代码
5、VM_Version_init(); 设置 主、次版本号、 设置build数等
6、stubRoutines_init1(); 便于c中调用java的代码(编译成汇编的形式)
7、jint status = universe_init(); 建立代码缓存和代码加载相关的表格
8、interpreter_init(); 每个字节码、程序和函数的调用都要进行计数,compiler将 java文件变成class文件,
interpreter处理class文件
9、invocationCounter_init(); 调用计数
10、templateTable_init();
每个字节码对应有相应的汇编指令,这个结构封装成template,所有字节码的template封装成templateTable,
里面包含每个字节码指令的具体机器码映射,如 invokedynamic
11、SharedRuntime::generate_stubs();
SharedRuntime运行时中平台独立的那些组件,生成功能性的代码块,如 解析函数调用、返回结构、出错处理 各种handler
12、universe2_init(); 支持catch 和堆(heap)内存验证
13、referenceProcessor_init(); 引用计数和handle初始化,便于GC的实现
14、jni_handles_init(); 借助 SystemDictionary和符号表等 实现handle的映射管理
15 vmStructs_init(); vmStructs.cpp 中定义了jvm内部使用的所有的数据结构
16 vtableStubs_init(); VtableStub 索引和表项的结构,表项内的数据是代码 的stub
17 InlineCacheBuffer_init(); 代码缓冲区
18 compilerOracle_init(); oracle的编译器
19 compilationPolicy_init(); 指定使用哪个编译器 以及如何进行编译
20 VMRegImpl::set_regName(); 设置好名字,便于汇编代码的生成
21 universe_post_init() 初始化部件后的逻辑操作,包括 加载 异常等基础类、构建报错信息、安全检查、加载器、引用管理等
22 javaClasses_init(); 处理和检查
class文件中数据的offset,以便在执行时进行有效的连接(有对invokedynamic的支持)
23 stubRoutines_init2(); 再一次初始化(桩stub)信息
概括
后端:字节码的映射、表结构、汇编生成;stub的管理;解释器的JIT缓存
前端:统计计数、类加载、编译器
控制中枢:内部的核心数据结构
分享到:
相关推荐
- 将 Java 源代码转换为符合 JVM 规范的字节码文件。 - `javac` 是 Java 语言的标准前端编译器,用于将 Java 源代码编译为字节码。 - 编译过程包括四个阶段:词法分析、语法分析、语义分析和字节码生成。 ##### ...
当编写完Java源代码(例如`Person.java`)后,我们使用JDK中的`javac`编译器将其转化为字节码文件(例如`Person.class`)。这个过程中,源码首先通过词法分析器转化为tokens流,接着由语法分析器构建语法树,再经过...
- **Java**:兼具编译型与解释型的特点,源代码首先被编译为字节码,然后由JVM解释执行,同时也支持JIT(Just-In-Time)编译以提高执行效率。 #### 三、JVM核心技术详解 ##### 1. 类文件加载机制 类文件加载是指...
Java源代码经过编译后生成字节码,如calc()方法的字节码指令。iconst_3将整型常量3压入操作数栈,istore_0将栈顶的3存入局部变量0,iload_0再将局部变量0的值加载回栈,如此类推,执行加法操作(iadd),最后ireturn...
Java SDK中的javac编译器将.java源代码转化为.class字节码。这个过程包括: 1. 分析输入到符号表,构建抽象语法树。 2. 处理注解,JDK1.5之后,注解成为JVM处理的一部分。 3. 一系列的语义检查、验证和代码优化,...
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第2版源代码
《大数据笔记:深入理解Kafka与JVM》 在当今数字化时代,大数据处理技术成为企业不可或缺的核心竞争力。Apache Kafka作为一款高效、可扩展且容错性强的分布式消息系统,广泛应用于实时数据流处理和大数据分析场景。...
1. **启动类加载器** (`BootstrapClassLoader`): 用C++编写,负责加载机器上安装的`javalib`目录下的核心类库(如`rt.jar`、`resources.jar`),主要用于提供JVM自身需要的核心类。 2. **扩展类加载器** (`...
- **源代码编译**:通过`javac`命令将`.java`文件编译成`.class`文件。 - **字节码执行**:JVM读取编译后的`.class`文件,并解释执行其中的字节码指令。 ##### JVM架构 JVM主要由以下几个部分组成: - **类加载器...
- **逻辑结构**:从逻辑上讲,JVM主要由以下几部分组成: - **类加载器系统**:负责读取类文件,并将其转换为运行时的数据结构。 - **运行时数据区**:包括方法区、堆、栈等区域。 - **执行引擎**:解释并执行...
编译型语言(如C、C++、Go)在运行前通过编译器将源代码一次性编译成机器码,生成可直接运行的程序,其执行速度快,但跨平台性较差。解释型语言(如Python、JavaScript)则在运行时逐行解释并执行源代码,虽然跨平台...
《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新。并详细介绍了jvm、jre、java se api、jdk与ide之间的对照关系。必要时从java se api的源代码分析,...
Java语言则处于这两种类型之间,它首先通过javac编译器将源代码编译成字节码,然后在JVM中执行。JVM既有解释器也有编译器(JIT,Just-In-Time Compiler),它会动态地将部分字节码编译为机器码以提高运行效率,这...
在JVM的学习过程中,策略文件是一个重要的环节,它主要用于安全管理,控制不同代码的权限。本篇笔记将深入探讨Java策略文件的概念、结构以及如何使用。 策略文件是Java安全模型的一部分,它定义了哪些代码可以执行...
尽管字段表不包含从超类继承的字段,但可能包含非源代码中显式声明的字段,如内部类对外部类的引用。 总的来说,JVM的执行子系统通过理解并解析Class文件的结构,实现了对Java程序的解释和执行。这种精心设计的二...
在深入理解JVM之前,我们先要明白什么是字节码:Java源代码经过编译后生成的中间表示,即.class文件,里面包含的就是字节码。这个过程确保了Java的“一次编写,到处运行”特性。 JVM的主要功能包括类加载、内存管理...
【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...
### 韩顺平Java视频教程源代码与笔记解析 #### Java平台概述 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版的Java开发平台,适用于桌面应用程序开发,提供了完整的Java技术和API集合。 - **J2EE(Java...