栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java编译到执行的过程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java编译到执行的过程

文章目录
  • 前言
  • 一、编译
  • 二、加载
    • 1.装载
    • 2.连接(验证->准备->解析)
      • 1.验证
      • 2.准备
      • 3.解析
    • 3.初始化
  • 三、解释
  • 四、执行


前言

我们都知道java是编译为class文件,然后在jvm中运行的,我认为有4个步骤:编译->加载->解释->执行


一、编译

编译器对java源码做「语法分析」「语义分析」「注解处理」等等处理,然后生成字节码(class)文件。eg: Lombok。

二、加载

将class加载到jvm。(装载->连接->初始化)

1.装载

1.【装载时机】jvm为了节省内存,不会一次性装载全部的类,而是需要时,才装载。
2.【装载发生】class通过「类加载器」装载到jvm,为防止重复,采用双亲委派机制。
3.【装载规则】jdk本地方法由根加载器(Bootstrap loader)装载;
jdk内部扩展由扩展类加载器(ExtclassLoader)装载;
程序中的类由系统类加载器(AppClassLoader)装载;
此外还有自定义类加载器。
装载的具体内容:
1.找到class的二进制文件;
2.在「堆」中创建对象;类相关信息存入「方法区」;

2.连接(验证->准备->解析)

对class进行验证,为「类变量」分配内存空间;同时赋默认值。

1.验证

class是否符合java和jvm的规范

2.准备

class的静态变量分配内存;初始化为系统默认值。

3.解析

将符号引用转为直接引用

String xx = "abc";
System.out.print("str="+xx);

System.out.print("str="+"abc");
3.初始化

为class的静态变量赋予正确的初始值。面试问到的类方法加载顺序,就是这时候发生的。

三、解释

将class转为操作系统识别指令
1.字节码解释器->一般代码都走它。
2.即使编译器(JIT)->热点代码走它,会将编译后的指令码保存下来,下次直接执行。

四、执行

操作系统执行解释器解析后的指令码。调硬件执行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号