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/713693/

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

(0)

大家都在看

  • Java开发之JavaWeb速成 —- 第二部分

    JavaWeb速成 前言 以最少时间,快速学完各知识点。知识点围绕概念,作用,使用方法来写,适合有javaweb基础的人复习 旨在快速入手/复习,放实例显得冗余,所以实例代码会以截…

    技术杂谈 2023年7月24日
    067
  • 使用vscode对threejs的本地调试

    始终坚信阅读和调试结合的方式,才是学习开源的高效方法 一、老版本调试 遥想当年的threejs(使用版本为r75)还没有CommonJS,对于我这个小白可以拿起大刀大杀四方&#82…

    技术杂谈 2023年7月23日
    0104
  • Vue教程老师笔记

    //全局前置守卫:初始化时执行、每次路由切换前执行 router.beforeEach((to,from,next)=>{ console.log(‘before…

    技术杂谈 2023年6月1日
    0103
  • [转载]Redis 持久化之RDB和AOF

    在正式数据(当然是非生产环境啦)练习以下操作时,一定一定一定记得备份dump.rdb文件。我给自己的服务器添加了aof持久化配置,重启后,发现aof文件为空,就想把rdb文件恢复到…

    技术杂谈 2023年7月10日
    069
  • jprofiler 提供的几个方便工具

    jprofiler 不只是可以在启动时添加agent信息,运行时态也是可以了,官方提供了不少工具 几个有用的工具 jpenable 可以jprofiler 的进程附加,可以方便jp…

    技术杂谈 2023年5月30日
    0100
  • 树莓派挂载exfat和ntfs格式硬盘优盘

    树莓派 Linux系统默认可以自动识别到fat32格式的盘,但fat32支持的文件不能大于4G,所以只能将移动硬盘和U盘格式化为NTFS和exFAT这两种格式的,闪迪U盘一般默认格…

    技术杂谈 2023年7月23日
    049
  • 高级(完结)

    十、 面向对象 – 高级 10.1 类变量和类方法 10.1.1 类变量的引入 堆雪球问题:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?,…

    技术杂谈 2023年7月11日
    094
  • Locust的使用一

    Locust 是一个开源负载测试工具,使用 Python 代码定义用户行为 安装 pip install locust 查看是否安装成功 locust -V 测试locustfil…

    技术杂谈 2023年5月31日
    092
  • vnpy源码阅读学习(8):关于app

    关于app 在入口程序中,我们看到了把 gateway, app, 各类的 engine都添加到 mainEngine中来。不难猜测 gateway主要是处理跟外部的行情,接口各方…

    技术杂谈 2023年7月11日
    084
  • Linux Accounting(中文翻译)(1):Pressure Stall Information

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月11日
    073
  • Python中的print()语句

    Python中print()语句的相关使用 介绍 print()函数可以将输出的信息打印出来,即发送给标准输出流。Python中可以直接使用print()函数,将信息展示在控制台 …

    技术杂谈 2023年7月24日
    0102
  • phpmyadmin 导出数据表

    — — 表的结构 eb_store_category — DROP TABLE IF …

    技术杂谈 2023年5月31日
    093
  • spring-MVC

    步骤 1.创建maven父项目 导入公共依赖 junit junit 4.12 org.springframework spring-webmvc 5.1.9.RELEASE ja…

    技术杂谈 2023年7月11日
    084
  • MySQLmax()min()函数取值错误

    今天日志出现异常,一步一步debug发现SQL语句返回值出错,进一步发现是max()函数返回出错。点击跳转解决办法,赶时间的朋友可以去获得答案。当然我还是希望大伙看看原由。 sel…

    技术杂谈 2023年7月24日
    072
  • 【软考】信息安全审计

    1.概念 安全审计(Security Audit)是记录、审查主体对客体进行访问和使用情况,保证安全规则被正确执行,并帮助分析安全事故产生的原因。 安全审计系统采用数据挖掘和数据仓…

    技术杂谈 2023年5月31日
    092
  • 三十二张图告诉你,Jenkins构建SpringBoot有多简单~

    持续原创输出,点击上方蓝字关注我 目录 前言 如何安装Jenkins? 环境准备 开始安装Jenkins 初始化配置 访问首页 输入管理员密码 安装插件 创建管理员 实例配置 配置…

    技术杂谈 2023年7月23日
    059
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球