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

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缓存
前端:统计计数、类加载、编译器
控制中枢:内部的核心数据结构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值