Java类加载过程图解
朋友给我发了一道有意思的题目,如下
为什么用.class的方式加载类和以Class.forName()的方式加载的结果不同呢,原因很简单,就是类加载过程的不同。
这就扯到基础理解上了,就是Java是如何加载一个类的呢?
上图是我绘制的整个Java类加载过程。
首先是编译期,将Java源文件也就是敲好的代码通过编译,转换成.class文件,也就是字节码文件(byte),然后经过传输传给类加载器,传输的是刚转换好的字节码文件,也可以是通过网络传输过来的字节码文件,这个是分布式架构下的情况。
然后就是运行期,运行期一开始,类加载器初始化字节码文件,通过本地类库来验证字节码文件的正确性,然后交给JVM的解释器和即时编译器,最后汇合给JVM内部的Java运行系统,都ok了后传给PC的操作系统,最后就是物理硬件层面。
所以问题的答案就有了
.class是JVM将类装入内存,是在编译期间实现的,而编译期间只是做了字节码转换,所以不执行静态块
而class.forName()除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。当然还可以指定是否执行静态块。
扫码关注我的微信公众号:Java架构师进阶编程 获取最新面试题,电子书
专注分享Java技术干货,包括JVM、SpringBoot、SpringCloud、数据库、架构设计、面试题、电子书等,期待你的关注!
Java类加载过程图解相关推荐
- 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...
- Java类加载过程内存分析
Java类加载过程内存分析 Java类加载过程 编译 类的加载 类加载器 运行时数据区 执行引擎 Java类加载过程 具体过程如下: 编译 首先Java源代码会被编译器编译成class文件以供计算机执 ...
- java 类加载过程
1. 使用命令行查看类加载过程,在eclipse测试类的run configuration中配置-verbose:class或者-verbose,如下图所示: 运行结果如下所示: [Opened D: ...
- java类加载过程_面试官:java类的加载过程
Java 类加载机制 类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段. 其中类加载过程包括加载.验证.准备.解析和初始化五个阶段. 类的加载 ...
- java类加载过程(双亲委派机制)
类加载运行全过程 通过Java命令执行代码的大体流程如下: 其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> ...
- Java类加载过程、为什么会出现JVM?
目录 为什么会出现JVM? 编译和执行阶段(类加载过程) 编译阶段 主要的作用是什么? 编译的过程有哪些? 执行阶段 为什么会出现JVM? 我们学习Java的时候总是会听到这样一句话:Java程序可以 ...
- Java类加载过程详解
类的生命周期 类的加载 类加载过程 加载 链接 验证 准备 解析 初始化 总结 首先我们先简单了解一下整个JVM的体系结构是怎样的,如下图所示(图1): 再详细具体一点(图2): 上面的图片有些地方看 ...
- java类加载过程,双亲委派机制
1.双亲委派机制 Parent Delegation Model 又称为父级委托模型.想要了解它,还需理解类加载机制.类加载器.类加载器的层级关系. 2.类加载机制: 编译器把Java源文件编译成.c ...
- java类加载过程_java类的加载过程
在这本书里面,在讲到类初始化的五种情况时,提及了一个比较有趣的事情.先来看看下面的代码 public class SubClass { static{ System.err.println(" ...
最新文章
- 从世界数字大脑形成看元宇宙未来趋势
- 商人过河 java_商人过河问题(二)java实现
- lastpass安卓最新版_LastPass
- STM32开发 -- 启动流程
- 低延时直播与RTC融合架构设计②:直播与RTC低延时方案
- php for循环in的用法,JavaScript中for in循环是如何使用的?需要注意些什么?
- 众安每秒3.2万张保单的背后,阿里云输出了什么能力?
- VS2010给Activex添加接口
- 主函数中冒泡法 VS 自定义函数选择法
- 【珍藏版】长文详解python正则表达式
- 操作系统银行家算法(课程设计报告)JAVA实现
- 一看就能学会的H5视频推流方案
- matlab符号函数sgn,latex 符号函数sgn
- Linux为sh脚本文件添加执行权限
- Java开发的发展前景和未来规划方向
- git系列之-放弃修改
- 1.1.3 NetBIOS编程基础(1)
- html5多媒体事件写法,多媒体元素重要事件 -HTML5
- Java学习笔记-IO
- 提取动漫视频里的BGM