您的位置:首页 > 编程语言

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

2013-03-25 15:31 197 查看
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缓存

前端:统计计数、类加载、编译器

控制中枢:内部的核心数据结构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: