java命令去执行代码 底层是怎么样的一个流程呢?
winow 系统
首先 java.exe 运行 ---》 创建java虚拟机(c++执行) -->创建引导类加载器(c++执行)-->
0 c++ 开始执行java代码
-----------java代码开始------------
1 启动程序调用 创建jvm启动器
2 启动程序launcher类 继续加载其他类加载器 其中加载器有
a bootstrapClassLoad b extClassLoad c appClassLoad d 自定义的类加载器
3 调用classLoader.loadClass 去加载要运行的类
4 加载完成jvm会执行类里面的main方法入口
5 c++发起调用 main()
6 java执行结束 jvm销毁
其中loadClass的类加载过程
1 加载 在磁盘上抄袭并通过io读入字节码文件 使用到类才会加载 比如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的
java.lang.Class对象,作为方法区这个类的各种数据的访问入口
2 验证 校验字节码文件的正确性
3 准备 给类的静态变量分配内存,并赋予默认值
4 解析 将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如
main()方法)替换为指向数据所存内存的指针或句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用,下节课会讲到动态链接
5 初始化 对类的静态变量初始化为指定的值,执行静态代码块
怎么样 是不是学废了呢