Java命令执行代码的大体流程
2021-04-22 14:09:14 0 举报
Java命令执行代码的大体流程
作者其他创作
大纲/内容
classLoader.loadClass(\"com.***.Math\")
准备
创建一个引导类加载器实现实例(C++实现)
launcher.getClassLoader()
使用
JVM销毁
初始化
JVM
Math.javaUser.java
sun.misc.Launcher.getLauncher()
验证
调用loadClass加载要运行的类Math
Windows系统下java.exe调用底层的jvm.dll文件创建java虚拟机(底层由C++实现)
User.class
jar包class.main()
java的某个类
C++调用java代码创建JVM启动器实例sun.misc.Launcher该类由引导类加载器负责加载创建其它类加载器
Math.main()
加载
加载完成时候JVM会执行Math类的main方法入口
C++发起调用
java程序运行结束
解析
编译打包
其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载 加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的 main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的 java.lang.Class对象,作为方法区这个类的各种数据的访问入口 验证:校验字节码文件的正确性 准备:给类的静态变量分配内存,并赋予默认值 解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如 main()方法)替换为指向数据所存内存的指针或句柄等(直接引用),这是所谓的静态链接过 程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用,下 节课会讲到动态链接 初始化:对类的静态变量初始化为指定的值,执行静态代码块
收藏
0 条评论
回复 删除
下一页