JAVA | JVM笔记(一)

95 阅读2分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

JVM的加载过程

我们写好的java代码,怎么就在计算机里运行起来了? 他经历了什么样的过程 .java -> .class -> 类加载过程 -> JVM 在这里插入图片描述

看看从main()入口,到虚拟机,会经历什么

1.1 编译

将Java 编译成 Class 文件

1.2 类加载

将Class 加载进虚拟机中

1.2.1 加载过程

在这里插入图片描述

加载->验证->准备->解析->初始化->使用->卸载

(1)验证阶段:更具java虚拟机规范,校验加载进来的class是否符合规范
(2)准备阶段:为类、变量分配内存空间,并赋给默认值
(3)解析阶段:符号引用替换为直接引用

初始化这个类之前,父类还没加载和初始化,先加载父类,并且初始化之后才完成

1.2.2 类加载器

启动类加载器 -> 扩展类加载器 -> 应用程序类加载器 -> 自定义类加载器

(1)启动类加载器

Bootstrap ClassLoader,负责加载java目录下的核心类(“lib”目录)

(2)扩展类加载器

Extension ClassLoader,负责加载java目录下的“lib/ext”目录

(3)应用程序类加载器

Application ClassLoader,负责加载“class Path”环境变量指定的路径中的类

(4)自定义类加载器

加载自己定义的类

双亲委派机制

类加载器有亲子层级结构,从启动类-》扩展类-》应用程序类-》自定义类加载器一层一层
通俗的来说,就是叫老子(启动类加载器)去找东西,老子没找到,踢回儿子(扩展类加载器)哪里继续找,儿子找不到,踢到孙子(应用程序类加载器)哪里找,再找不到,只能自己曾孙找找(自定义类加载器)。 在这里插入图片描述