Java编译到执行的过程

Java编译到执行的过程

执行过程:

编译→加载→解释→执行

运行过程

.Java→.class→装载到JVM→.class→可执行指令→调用系统硬件执行最终指令

详细过程

  • 编译过程 包括 语义分析\语法分析\注解处理, 这些过程处理完之后才生成字节码.class文件, 一般对于泛型擦除\注解处理在这个阶段处理.

  • 加载过程 将.class字节码文件加载值JVM中, 加载过程包括 装载\连接\初始化, 为节省 内存开销, .class并不会一开始就被全加载到JVM中, 而是等到 需要时候的才进行 加载. .class文件通过 类加载器装载到JVM, 为 防止内存中 出现多份同样的字节码, 使用了 双亲委派机制(不会自己去尝试加载类, 把 请求委托给父类加载器完成, 依次向上请求).

  • 装载 加载 类的二进制数据→在 JVM堆中创建 java.lang.Class类对象→类信息 存储在JVM方法区

  • 连接 对class信息进行验证, 为类变量分配内存空间并赋默认值 验证→准备→解析
  • 初始化 为类的静态变量赋予正确的初始值
  • 解释过程 字节码→操作系统可以识别的机器指令码
  • 字节码解释器
  • 即时编译器JIT, 把热点代码的 指令码保存起来, 下次执行 无需重复解释, 直接执行缓存的机器语言.

  • JVM对 热点代码做编译, 非热点代码直接进行解释, 当JVM发现某个方法或代码块运行频繁时, 会把这部分代码认定为热点代码.(热点探测或计数器, 方法调用计数器和回边计数器)

  • 执行过程 操作系统执行最终程序指令, 调用硬件执行解释器解析出的指令码

结合理解画图

Java编译到执行的过程

Original: https://www.cnblogs.com/csrecord/p/16669131.html
Author: IWANNPEACE
Title: Java编译到执行的过程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/587365/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 代码规范浅谈

    代码规范这东西网上很容易百度到一堆,除了天下文章一大抄的问题,另外,多数只给了结果,原因没有充分说明,或者非常的纠结于大写小写,一个函数可以写几行的细节。感觉有点容易让新人误入歧途…

    Java 2023年6月15日
    075
  • HM2022ssm-mp3【DQL查询编程控制】

    条件查询 1.1 条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。 这个我们在前面都有见过,比如查询所有和分页查询的时候…

    Java 2023年6月5日
    085
  • Java学习 (20) Java数组篇(04)Arrays类&冒泡排序&稀疏数组

    Arrays类 语法实例 冒泡排序 语法实例 具体讲解视频(狂神说Java) 稀疏数组 语法实例 具体讲解视频(狂神说Java) Arrays类 教组的工具类java.util.A…

    Java 2023年6月8日
    0104
  • Java 基础【19】代理

    Java 代理(Proxy)模式与现实中的代理含义一致,如旅游代理、明星的经纪人。 在目标对象实现基础上,增加额外的功能操作,由此来扩展目标对象的功能。 JavaWeb 中最常见的…

    Java 2023年5月29日
    087
  • idea+maven+springboot+mybatis

    确认maven环境,安装maven在这里就不赘述了. 在idea新建maven项目 下图中填上你Maven安装的目录 打开pom文件,导入jar包(手动敲入/拷贝) 下面是配置之后…

    Java 2023年5月29日
    0102
  • Vue

    Vue 的核心库只关注视图层,方便与 HTML + CSS + JS : 视图 : 给用户看…

    Java 2023年6月7日
    083
  • java中StringBuffer和StringBuilder

    StringBuffer StringBuffer是一个容器 StringBuffer实现了Serializable,说明可以串行化 在父类中 AbstractStringBuil…

    Java 2023年6月6日
    075
  • 互联网技术部门该如何管理

    一、敏捷开发 1.快速开发、快速迭代。 2.组件式开发,避免重复造轮子。 3.制定代码标准。 4.并行开发,高效配合。 5.单元测试必须覆盖所有核心业务。 二、DevOps流程建立…

    Java 2023年6月16日
    085
  • Java开发环境搭建

    Java开发环境搭建 JDK下载安装 配置环境变量 JDK目录介绍 Hello world及简单语法介绍 Notepad++安装及使用 如何卸载JDK 找到JDK安装目录 右键我的…

    Java 2023年6月9日
    077
  • java 的多态 学习理解

    Father a = new Son(); 子类的实例引用 可以 无障碍 赋给 超类的对象变量; 可调用的方法: 以对象变量a 为例, a 能调用的方法 主要看 左边 的类型 里有…

    Java 2023年6月13日
    076
  • Go 使用 zap 日志库

    1.前言 zap 是我个人比较喜欢的日志库,是 uber 开源的,有较好的性能。很多开源 Go 项目都使用它作为日志组件。 2.安装使用 安装 go get -u go.uber….

    Java 2023年6月8日
    0104
  • Java开发学习(十七)—-AOP案例之测量业务层接口执行效率

    一、需求分析 这个需求比较简单 需求:任意业务层接口执行均可显示其执行效率(执行时长) 这个的目的是查看每个业务层执行的时间,这样就可以监控出哪个业务比较耗时,将其查找出来方便优化…

    Java 2023年5月29日
    089
  • 队列内存限制思路防止OOM

    前几天在一个开源项目的 github 里面看到这样的一个 pr: 光是看这个名字,里面有个 MemorySafe,我就有点陷进去了。 我先给你看看这个东西: 这个肯定很眼熟吧?我是…

    Java 2023年6月13日
    081
  • Java内部类初探

    Java内部类初探 之前对内部类的概念不太清晰,在此对内部类与外部类之间的关系以及它们之间的调用方式进行一个总结。 Java内部类一般可以分为以下三种: 成员内部类 静态内部类 匿…

    Java 2023年6月8日
    076
  • Redis变慢?深入浅出Redis性能诊断系列文章(一)

    (本文首发于”数据库架构师”公号,订阅”数据库架构师”公号,一起学习数据库技术) Redis 作为一款业内使用率最高的内存数据库,其…

    Java 2023年6月16日
    073
  • 图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理

    题图:by Charles Loyer 一、序 Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报…

    Java 2023年5月30日
    060
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球