jvm整体运行:
- 将.java文件编译成.class字节码文件
- 类加载器把.class字节码文件中的类加载到JVM中
- JVM执行类中写好的代码
jvm类加载机制
- jvm会在用到这个类的情况下加载该类
类加载经历加载->验证->准备->解析->初始化->使用->卸载->
加载:用到该类的时候从字节码文件中加载对应的类
验证,准备,解析:验证是否符合指定规范,准备就是给类变量分配内存空间,解析是把符号引用替换为直接引用过程。
初始化:核心阶段. 一是给变量赋值,二是执行new之类的操作,初始化类,如果父类未初始化,再初始化父类。类加载器和双亲委派机制。
有四种类加载器:
① 启动类加载器(Bootstrap classLoader):核心类加载器,加载java安装目录下的lib文件下的类库
② 扩展类加载器(Extension ClassLoader): 加载java目录下的lib/ext目录的类
③ 应用程序类加载器(Application ClassLoader):加载classPath环境变量指定路径类,可以理解为去加载写好的代码。
④ 自定义类加载器:自定义类加载器,根据需求去加载类
双亲委派机制:
如果应用程序需要加载一个类,先委派给自己的父类去加载,最终找到定长的类加载器,如果父类加载器在自己的范围内未找到该类,就推给子加载器去加载,依次类推。