jvm 源代码笔记 四 jvm主要功能模块

来源:互联网 发布:剑网3正太捏脸数据 编辑:程序博客网 时间:2021/04/13 09:19
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缓存
前端:统计计数、类加载、编译器
控制中枢:内部的核心数据结构