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 】
相关推荐:
中山网站制作网页,中山新生登记系统登记流程?
如何确保西部建站助手FTP传输的安全性?
jquery插件bootstrapValidator表单验证详解
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何处理表单验证?(Requests代码示例)
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
高端网站建设与定制开发一站式解决方案 中企动力
JS弹性运动实现方法分析
香港服务器租用费用高吗?如何避免常见误区?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
高防服务器如何保障网站安全无虞?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
如何用景安虚拟主机手机版绑定域名建站?
如何解决hover在ie6中的兼容性问题
Java遍历集合的三种方式
想要更高端的建设网站,这些原则一定要坚持!
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Python面向对象测试方法_mock解析【教程】
如何快速搭建高效服务器建站系统?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
js实现获取鼠标当前的位置
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Linux系统命令中tree命令详解
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel如何配置任务调度?(Cron Job示例)
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
北京企业网站设计制作公司,北京铁路集团官方网站?
bootstrap日历插件datetimepicker使用方法
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
C#如何调用原生C++ COM对象详解
深圳网站制作的公司有哪些,dido官方网站?
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
文字头像制作网站推荐软件,醒图能自动配文字吗?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
简单实现Android文件上传
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
如何快速搭建高效简练网站?
Laravel如何实现API资源集合?(Resource Collection教程)

