大地图: main ---JavaMain()---InitializeJVM----InvocationFunctions---LoadJavaVM----JNI_CreateJavaVM---Threads::create_vm
hotspot/src/share/vm/runtime/thread.cpp line:2996
Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain)
1、hotspot/src/os/windows/vm/os_windows.cpp line:3498 os::init()
win32::initialize_system_info(); 从系统中返回相关信息 主要数据结构 SYSTEM_INFO
win32::setmode_streams(); 改变标准文件的打开方式,如stdin、stdout 从文本模式转到二进制模式
init_page_sizes((size_t) win32::vm_page_size()); 虚拟页的大小
GetCurrentProcess() 获得进程
GetCurrentThreadId() 获得线程id
2、hotspot/src/share/vm/runtime/arguments.cpp Arguments::init_system_properties()
设置java和OS相关的系统属性
3、hotspot/src/share/vm/runtime/arguments.cpp line:2891 Arguments::parse(args);
jvm启动时设置的参数更新到了系统中
4、hotspot/src/os/windows/vm/os_windows.cpp line:3534 os::init_2()
主要是内存、栈、线程等OS密切的部分的初始化
set_polling_page
mem_serialize_page
large_page_init()
初始化OS保证的栈大小
最大地址空间
prio_init initialize thread priority policy(java中的10级的thread优先级)
5、 代理程序扩展 相关功能
agent java.lang.instrument 便于创建更改和监控class文件的工具或监控程序,这些程序以agentlib的形式来提供
6、main_thread 进行初始化
7、 ObjectMonitor::Initialize() java语言的同步系统
8、 hotspot/src/share/vm/runtime/init.cpp line:90
init_globals()非常的复杂,此部分是vm内部的主要的模块
9、Threads::add(main_thread);
10、创建VMThread VMThread::vm_thread()
11、加载进来 用到的库、string、hashmap ,java.lang包 等基础的类支持
12、initialize_class(vmSymbols::java_lang_Compiler(), CHECK_0); 初始化编译器
13、quicken_jni_functions() 使jni本地的函数指针更有效
14、SystemDictionary::compute_java_system_loader(THREAD); 指定类加载器
15、os::signal_init(); 初始化OS的信号系统,这样JVM才可以向OS发送相应的信号信息
16、AttachListener::init_at_startup() 初始化 jvm本身的监听器
17、初始化编译器 CompileBroker::compilation_init()
18、call_postVMInitHook(THREAD);
19、WatcherThread::start(); 支持定时器等周期性的任务
20、 os::init_3() 额外的OS初始化的机会
其中穿插的 trace、jniti、管理相关模块、都忽略不计
概述:OS、线程初始化;参数解析;启动回调;加载核心的功能模块;编译器相关
概念补充 :JVMTI(Java Virtual Machine Tool Interface)是一套由 Java 虚拟机提供的,为 JVM相关的工具提供的本地编程接口集合。
分享到:
相关推荐
JVM 源代码part1 (看我的上传记录 有1--9 个part)
JVM 源代码 part07
JVM 源代码 part06
sunJVM的源代码9
JVM 源代码
JVM 源代码
JVM的相关概念___已看.doc
JVM 源代码
JVM 源代码 part09
JVM 源代码 part08
JVM 源代码 part05
04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、...
Java虚拟机(Java Virtual Machine,简称JVM)是Java编程语言的核心组成部分,它是一个能够运行Java字节码的虚拟计算机系统。JVM使得Java程序具有跨平台性,因为它的设计目标是实现“一次编写,到处运行”。在Linux...
"jvm视频及笔记"这个资源显然是一份全面学习JVM的材料,结合了视频教程和书面笔记,帮助学习者深入理解JVM的工作原理及其在实际开发中的应用。 JVM的学习可以从以下几个重要的知识点开始: 1. **JVM架构**:JVM...
Java_Jvm_Jsp_Spring3_Struts2_Hibernate_Oracle _
"JVM.zip"可能是一个包含了与JVM相关的工具或示例代码的压缩包,特别是用于获取运行中的JVM系统的参数。这通常是开发人员为了监控和优化Java应用程序性能的重要手段。 在Java中,`SystemInfo`类的出现很可能是为了...
VC调用java的简单例子。需要注意jvm.dll路径,路径不对就不能成功!
JVM代理是一种在JVM启动时或者运行时插入额外功能的方式,它允许开发者在不修改源代码的情况下扩展或修改Java应用程序的行为。通常,JVM代理被用于性能监控、日志记录、动态字节码注入等场景。Java提供了一种标准...
### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...
1. **字节码**:Java源代码经过编译后生成的中间表示形式,称为字节码(.class文件)。这是因为字节码是平台无关的,可以在任何装有JVM的设备上运行。 2. **类加载器**:JVM的类加载器负责查找并加载类文件到内存中...