parent
1ddbdf97b6
commit
f8774e55c9
1 changed files with 31 additions and 0 deletions
@ -0,0 +1,31 @@ |
||||
--- |
||||
title: java程序启动时都发生了什么 |
||||
tags: Java技术 |
||||
categories: 技术随笔 |
||||
abbrlink: 1818557386 |
||||
date: 2024-03-06 14:22:05 |
||||
keywords: |
||||
description: |
||||
cover: |
||||
--- |
||||
|
||||
> 本文主要介绍在我们执行java -jar xxx.jar时都发生了什么,附框图。 |
||||
|
||||
当我们执行这个命令时: |
||||
1. java命令会去调用jvm.dll来创建java虚拟机 |
||||
2. java虚拟机创建一个引导类加载器,并使用它加载sun.misc.Launcher类 |
||||
3. Launcher类创建一些其他的类加载器,比如appclassloader,随后appclassloader会去加载Main.class类。 其中main class是从jar包中的MANIFEST.MF文件找到的。 |
||||
|
||||
<img src="https://img.dreamlyn.cn:8443/i/2024/03/06/142407.webp"> |
||||
|
||||
加载的过程如下: |
||||
1. 首先把类从硬盘加载到jvm内存,具体是在方法区 |
||||
2. 然后对类进行验证,主要是验证这个类的字节码是否符合Java的规范,比如某个字节放Java的主版本,次版本,某个字节放类的常量个数等。 |
||||
3. 之后进行准备,主要是对类内的静态变量分配内存并赋予默认值. |
||||
4. 随后进行解析,把类内部的符号变量替换为一些静态地址. |
||||
5. 最后进行初始化,对静态变量赋予初始值。 |
||||
|
||||
<img src="https://img.dreamlyn.cn:8443/i/2024/03/06/142424.webp"> |
||||
|
||||
|
||||
|
Loading…
Reference in new issue