搜索
首页JavaJava基础java代码编译顺序是什么

java代码编译顺序:首先源代码进入词法分析器,token流后进入语法分析器;然后进行抽象语法树后进行语义分析器;接着注解抽象语法树,并使用字节码生成器;最后生成jvm字节码。

java代码编译顺序是什么

java代码编译顺序:

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

aa95864e0059a8c9bd0bd06f47c52db.png

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

105a67beb011fd14a15a5a18746223c.png

Java代码编译和执行的整个过程包含了以下三个重要的机制:1)Java源码编译机制;2)类加载机制;3)类执行机制

其中,Java源码编译由以下三个过程组成:1)分析和输入到符号表;2)注解处理;3)语义分析和生成class文件

流程图如下所示:

8e75e49f8bc0863592e3ab967fbbbb4.png

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

1)结构信息。包括class文件格式版本号及各部分的数量与大小的信息。

2)元数据。对应于Java源码中声明与常量的信息。包含类、继承的超类、实现的接口的声明信息、域与方法声明信息和常量池。

3)方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息。

类加载机制

JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序如下图所示:

62c4f2b267b5ee6b4f0c4c0c5f2de02.png

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已加载就视为已加载类,保证此类只加载一次。而加载的顺序是自顶向下。

类执行机制

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

fbeb9aa11817cab5141c86eb349df66.png

相关免费学习推荐:java基础教程

以上是java代码编译顺序是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具