From f8774e55c9236a00ae74e6eb9ef468468906b1cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E4=BA=9A=E6=A5=A0?= <1206054578@qq.com>
Date: Wed, 6 Mar 2024 14:33:45 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0java?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=90=AF=E5=8A=A8=E6=97=B6=E9=83=BD=E5=8F=91?=
=?UTF-8?q?=E7=94=9F=E4=BA=86=E4=BB=80=E4=B9=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java程序启动时都发生了什么.md | 31 +++++++++++++++++++
1 file changed, 31 insertions(+)
create mode 100644 source/_posts/other/java程序启动时都发生了什么.md
diff --git a/source/_posts/other/java程序启动时都发生了什么.md b/source/_posts/other/java程序启动时都发生了什么.md
new file mode 100644
index 0000000..fb4220c
--- /dev/null
+++ b/source/_posts/other/java程序启动时都发生了什么.md
@@ -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文件找到的。
+
+
+
+加载的过程如下:
+1. 首先把类从硬盘加载到jvm内存,具体是在方法区
+2. 然后对类进行验证,主要是验证这个类的字节码是否符合Java的规范,比如某个字节放Java的主版本,次版本,某个字节放类的常量个数等。
+3. 之后进行准备,主要是对类内的静态变量分配内存并赋予默认值.
+4. 随后进行解析,把类内部的符号变量替换为一些静态地址.
+5. 最后进行初始化,对静态变量赋予初始值。
+
+
+
+
+