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教程)