任何程序的运行都需要先进行编译,得到可执行文件。之后运行该可执行文件,实际上就是将其加载到内存中的过程。
本文针对文件加载,以Java程序为例,进行详细阐述。
分析:Java的可执行文件是.class为后缀的文件,运行在Java虚拟机上(JVM)
加载过程:JVM加载class、
JVM加载class:
(1)执行java.exe,加载jre中jvm.dll文件,加载其它动态链接库,激活Java虚拟机。
(2)虚拟机加载系统配置文件,产生第一个类加载器:启动类加载器(BootstrapClassLoader),主要用于加载java API中包含的类文件;
(3)启动类加载器完成初始化工作,其中最重要的是加载Launcher.java,启动ExtendClassLoader和AppClassLoader,主要用于加载用户定义的类文件。
加载原则:双亲委托原则
首先,累加载器之间存在继承关系,也就是父子关系:启动类加载器<--扩展类加载器<--用户定义类加载器
原则:加载某一个类Test.class时,按常理应该先是最低级的类加载,但是JVM考虑到Java API被重写的安全因素,类加载器依次向上委托,因此类加载器使用的的顺序:
启动类加载器-->扩展类加载器-->用户定义类加载器