JVM教程之Java代码编译和执行的整个过程(二)

发布时间 - 2026-01-11 00:25:47    点击率:

Java代码编译是由Java源码编译器来完成,流程图如下所示:

Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:

Java代码编译和执行的整个过程包含了以下三个重要的机制:

Java源码编译机制类加载机制类执行机制

Java源码编译机制

Java源码编译由以下三个过程组成:

分析和输入到符号表注解处理语义分析和生成class文件

流程图如下所示:

最后生成的class文件由以下部分组成:

结构信息。包括class文件格式版本号及各部分的数量与大小的信息元数据。对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息

类加载机制

JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:

1)Bootstrap ClassLoader

负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类

2)Extension ClassLoader

负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

3)App ClassLoader

负责记载classpath中指定的jar包及目录中class

4)Custom ClassLoader

属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader

加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

类执行机制

JVM是基于栈的体系结构来执行class字节码的。线程创建后,都会产生程序计数器(PC)和栈(Stack),程序计数器存放下一条要执行的指令在方法内的偏移量,栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是有局部变量区和操作数栈两部分组成,局部变量区用于存放方法中的局部变量和参数,操作数栈中用于存放方法执行过程中产生的中间结果。栈的结构如下图所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java代码编译和执行  # Java代码编译  # Java代码执行  # 用命令行编译java并生成可执行的jar包方法  # Java动态编译执行代码示例  # Java基于解释器模式实现定义一种简单的语言功能示例  # 23种设计模式(15)java解释器模式  # java线程间通信的通俗解释及代码示例  # Java卡片布局管理器解释及实例  # Java中关于Null的9个解释(Java Null详解)  # Java编译和解释执行对比及原理解析  # 加载  # 所示  # 是由  # 此类  # 来完成  # 子类  # 过程中  # 又是  # 也就  # 求值  # 自定义  # 两部分  # 大家多多  # 会先  # 如下图  # 应用程序  # 各部分  # 应于  # 偏移量  # 包含了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 在线制作视频网站免费,都有哪些好的动漫网站?  微信小程序 闭包写法详细介绍  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  如何生成腾讯云建站专用兑换码?  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何快速搭建自助建站会员专属系统?  实例解析angularjs的filter过滤器  Laravel如何生成URL和重定向?(路由助手函数)  javascript日期怎么处理_如何格式化输出  iOS发送验证码倒计时应用  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何快速辨别茅台真假?关键步骤解析  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Swift中switch语句区间和元组模式匹配  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  简单实现jsp分页  jQuery中的100个技巧汇总  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  打造顶配客厅影院,这份100寸电视推荐名单请查收  JavaScript如何实现类型判断_typeof和instanceof有什么区别  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何用花生壳三步快速搭建专属网站?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  ,交易猫的商品怎么发布到网站上去?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何构建满足综合性能需求的优质建站方案?  EditPlus中的正则表达式 实战(2)  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Python进程池调度策略_任务分发说明【指导】  如何在阿里云高效完成企业建站全流程?  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何在服务器上配置二级域名建站?  如何在阿里云购买域名并搭建网站?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何用景安虚拟主机手机版绑定域名建站?  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何用低价快速搭建高质量网站?