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存储桶【教程】
如何用低价快速搭建高质量网站?

