Java代码编译过程简述

12、Java代码缓存与编译过程深度解析 本文深入解析了Java 11代码缓存的分段机制及编译过程,包括分层编译的五个级别、去优化的影响与处理方法,以及如何通过工具监控和调优代码缓存。同时提供了常见问题的解决建议和最佳实践,帮助开发者更好地理解和优化Java应用程序的性能。 阅读详情

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


        图1

        Javac是一种编译器,能将一种语言规范转化成另外一种语言规范,通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范,如C/C++或者汇编语言都是将源代码直接编译成目标机器码,这个目标机器代码是CPU直接执行的指令集合。这些指令集合也就是底层的一种语言规范。

        Javac的编译器也是将Java这种对人非常友好的编程语言编译成对对所有机器都非常友好的一种语言。这种语言不是针对某种机器或某个平台。怎么消除不同种类,不同平台之间的差异这个任务就有JVM来完成,而Javac的任务就是将Java源代码语言转化为JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言。

        Javac的任务就是将Java源代码编译成Java字节码,也就是JVM能够识别的二进制代码,从表面看是将.java文件转化为.class文件。而实际上是将Java源代码转化成一连串二进制数字,这些二进制数字是有格式的,只有JVM能够真确的识别他们到底代表什么意思。

        编译器把一种语言规范转化为另一种语言规范的这个过程需要哪些步骤?回答这个问题需要参照《编译原理》,总结过程如下:

        1)词法分析:读取源代码,一个字节一个字节的读进来,找出这些词法中我们定义的语言关键词如:if、else、while等,识别哪些if是合法的哪些是不合法的。这个步骤就是词法分析过程。

        词法分析的结果:就是从源代码中找出了一些规范化的token流,就像人类语言中,给你一句话你要分辨出哪些是一个词语,哪些是标点符号,哪些是动词,哪些是名词。

        2)语法分析:就是对词法分析中得到的token流进行语法分析,这一步就是检查这些关键词组合在一起是不是符合Java语言规范。如if的后面是不是紧跟着一个布尔型判断表达式。

        语法分析的结果:就是形成一个符合Java语言规定的抽象语法树,抽象语法树是一个结构化的语法表达形式,它的作用是把语言的主要词法用一个结构化的形式组织在一起。这棵语法树可以被后面按照新的规则再重新组织。

        3)语义分析:语法分析完成之后也就不存在语法问题了,语义分析的主要工作就是把一些难懂的,复杂的语法转化成更简单的语法。就如难懂的文言文转化为大家都懂的百话文,或者是注释一下一些不懂的成语。

        语义分析结果:就是将复杂的语法转化为简单的语法,对应到Java就是将foreach转化为for循环,还有一些注释等。最后生成一棵抽象的语法树,这棵语法树也就更接近目标语言的语法规则。

        4)字节码生成:将会根据经过注释的抽象语法树生成字节码,也就是将一个数据结构转化为另外一个数据结构。就像将所有的中文词语翻译成英文单词后按照英文语法组装文英文语句。代码生成器的结果就是生成符合java虚拟机规范的字节码。这个过程中的需要的组件如下图2所示:


        图2

        从上面的描述中我们知道编译就是将一种语言通过分析分解,再按照一定的方式先形成一个简单的框架(将Java源文件的字节流转化为对应的token流)然后在通过详细的分析按照一定的规定在这个框架里添加东西使这个token流形成更加结构化的语法树(就是将前面生成的token流中的一个个单词组装成一句话),但是这棵树离我们的目标—Java字节码还有点差距,所以再进行语义分析使那颗粗糙的树更加完整完善(给类添加默认的构造函数,检查变量在使用前有没有初始化,检查操作变量类型是否匹配),然后javac编译器调用com.sun.tools.javac.jvm.Gen类遍历这棵语法树将java方法中的代码块转换成符合JVM语法的命令形式的二进制数据。按照JVM的文件组织格式将字节码输出到以class为扩展名的文件中,也就是生成最终的java字节码。词法分析就是将关键词组织成token流即检查源码中的的关键词是否真确并组织成token流,而语法分析就是检查源码是否符合java语法规范并将词组成语句。语义分析就是简化复杂的添加缺少的,检查变量类型是否合法。代码生成器就是遍历这棵树生成符合JVM规范的代码。

【定位模块算法】amcl(蒙特卡洛)粒子滤波定位算法(附C++代码) 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言(1)amcl定位框架介绍(2)amcl定位框架组成(1)ROS-TF坐标转换树【ROS的工具】(2)robot_pose_ekf扩展卡尔曼位姿估计算法(3)定位amcl自适应蒙特卡洛定位,adaptive monte carlo localizaion**(3)amcl定位节点的订阅与发布(4)amcl定位功能包用法(1)编写amcl节点相关的launch(amcl_omni.l 阅读详情

相关推荐

OpenDRIVE车道计算避坑指南:为什么你的poly3曲线总对不齐?

本文深入解析OpenDRIVE标准中车道几何计算的三大核心难题:参数化三次多项式(ParamPoly3)的坐标系转换与参数映射、车道偏移与宽度的优先级判定,以及螺旋线(Spiral)接续的平滑性保障。通过实战案例与代码示例,提供了一套避免车道线错位与曲率不连续的精确计算与验证方法,是高精地图开发与仿真场景构建的实用避坑指南。

q9w8e7r6t5的博客 424

Java编译的三种方式

源程序.java-->编译器javac(javac 源程序.java)-->字节码文件.class-->JVM使程序运行在不同的操作环境上(java 字节码文件.class)

qq_61911584的博客 3625

DeepSeek助力学术审稿:高效处理审稿意见的实用提示词指南

本文介绍如何利用DeepSeek AI工具高效处理学术审稿意见,提供实用的提示词指南。从评审意见结构化整理到争议问题回应策略,详细解析AI在加速审稿流程中的应用技巧,帮助研究者大幅提升回复效率和质量。

weixin_28684497的博客 596

Java编译过程、JIT编译详解、类加载过程

Java程序员必知的Java编译流程、JIT编译

在路上 2257

HC32F460 SPI DMA 实现高效TFT屏幕刷新的实战解析

本文针对HC32F460 MCU驱动TFT屏幕时刷新卡顿的问题,深入解析了SPI DMA技术的实战应用。通过对比传统查询模式与DMA模式的性能数据,详细阐述了如何配置SPI与DMA资源、构建核心驱动框架,并提供了避坑指南与进阶优化思路,最终实现高效、流畅的屏幕刷新,显著降低CPU占用率。

weixin_29163797的博客 151

STM32cube HAL库两条命令实现i2c通信---Nucleo L476RG用I2C实现tmp117模块温度读取并串口打印

Getting Started with STM32 - I2C Example

m0_54706625的博客 1832

JVM(一)一文读懂Java编译全过程

一文读懂Java编译全过程 Java文件编译过程包括两个阶段,第一阶段是在编译阶段编译成Java字节码的过程,有些书籍中叫前端编译器,如Oracle的javac编译器;第二阶段是在运行时,通过JVM的编译优化组件,对代码中的部分代码编译成本地代码,即JIT编译,如HotSpot中的C1、C2编译器。JVM整个编译过如下图所示。 其中,编译状态有如下9种。 //编译状态 public enum CompileState { INIT(0),//初始化 PARSE(1),//

gonghaiyu的博客 2万+

ESP32小车DIY:从零搭建无线遥控智能车(附完整代码与避坑指南)

本文详细介绍了如何从零开始DIY一台基于ESP32的无线遥控智能小车。内容涵盖核心硬件选型、电路设计、低延迟ESP-NOW无线通信协议的配置与实战,以及双电机差速控制算法与PWM调速的实现。文章提供了完整的代码示例和关键的避坑指南,旨在帮助开发者快速构建稳定可靠的智能车平台,并为进一步的功能扩展奠定基础。

gamma的博客 471

不能不懂的 Java 源代码编译过程分析

前言 首先问大家一个问题,我们开发好 Java 代码是如何运行的?我们写了这么多年的代码,对于代码运行的流程是否清楚呢? 是不是在 ide 中点一下 Run 启动就完事了,我们写的代码直接就跑起来了,其实在背后编译器和虚拟机默默的在帮我们承受了这一切。 Java 程序从源文件创建到程序运行要经过两大步骤: 1、源文件由编译器编译成字节码 2、字节码由 Java 虚拟机解释运行。因为 Java 程序既要编译同时也要经过 JVM 的解释运行。 Java 代码编译 代码编译由 JAVA 源码编译器来完成。主要是将

养歌的博客 6578

强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3)

DDPG的critic会高估, 从而导致actor策略失败。TD3是增加了三个关键技巧优化DDPG。经过优化后的TD3(Twin Dalayed DDPG 双延迟深度确定性策略梯度算法)适合于具有高维连续动作空间的任务。

RL小站 2690

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3805

编译 java_如何编译java

展开全部用命令32313133353236313431303231363533e58685e5aeb931333337613139提示符编译java程序的步骤:1.先新建文本文档,输入自己的java程序。这里我写一个简单的java程序,来做示范。import java.util.*;public class HelloDate{public static void main(String[] ar...

weixin_35327824的博客 1万+

〔重庆理工大学〕计算机网络实验指导书【实验九 直连路由,静态路由,默认路由配置】

本实验指导书介绍了直连路由、静态路由和默认路由的配置方法。主要内容包括:1)路由器基础知识,包括直连路由、静态路由和动态路由三种路由生成方式;2)路由度量值与匹配顺序,解释了不同路由类型的优先级;3)实验任务分为三个部分:直连路由的查看分析、静态路由的配置以及默认路由的配置,详细说明了配置步骤和命令。实验要求通过模拟器搭建网络环境,完成路由配置使PC间能够互通。实验旨在帮助学生掌握不同路由类型的工作原理和配置方法,适用于简单的网络环境。

Pretty Boy Fox的博客 1058

java代码编译过程_Java代码编译过程简述

代码编译是由Javac编译器来完成,流程如下图1所示:Javac是一种编译器,能将一种语言规范转化成另外一种语言规范,通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范,如C/C++或者汇编语言都是将源代码直接编译成目标机器码,这个目标机器代码是CPU直接执行的指令集合。这些指令集合也就是底层的一种语言规范。Javac的编译器也是将Java这种对人非常友好的编程语言编译成对对所有机器...

weixin_36283702的博客 236

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 代码从编译到执行的过程

编写的 Java 源代码,它们被保存为.java文件。在这个阶段,开发者依据需求,运用 Java 语法和 API,构建出具有特定功能的程序。比如,我们想要编写一个简单的 “Hello, World!这段代码定义了一个名为HelloWorld的类,并在main方法中使用System.out.println输出字符串。此时,这些代码是可读的文本,但是计算机并不能直接理解和执行。

2301_81364903的博客 694

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java源代码编译后的语言_【转】Java代码编译过程简述

代码编译是由Javac编译器来完成,流程如下图1所示:图1Javac是一种编译器,能将一种语言规范转化成另外一种语言规范,通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范,如C/C++或者汇编语言都是将源代码直接编译成目标机器码,这个目标机器代码是CPU直接执行的指令集合。这些指令集合也就是底层的一种语言规范。Javac的编译器也是将Java这种对人非常友好的编程语言编译成对对所有...

weixin_42584758的博客 472

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java代码编译和执行的整个过程

原文链接:Java代码编译和执行的整个过程 - 简书一、简述 Java代码编译和执行的整个过程包含了三个重要的机制:①Java源码编译机制;②类加载机制;③类执行机制 二、Java源码编译机制 Java代码编译是由Javac编...https://www.jianshu.com/p/056e36d6d6d6 一、简述 Java代码编译和执行的整个过程包含了三个重要的机制:①Java源码编译机制;②类加载机制;③类执行机制 二、Java源码编译机制 Java代码编译是由Javac编译器来完成,流程如图

jarniyy的博客 482

JAVA代码编译和执行过程

JAVA代码编译和执行过程

xiaotai1234的博客 221

Java代码编译执行的过程

Java代码编译执行的过程本文主要总结三点Java的编译和运行过程Java的编译执行和解释执行Java真的是逐行执行吗 本文主要总结三点 Java的编译以及运行过程 Java的编译执行和解释执行 Java编译后的执行顺序 Java的编译和运行过程 1):首先,我们会有一个.java文件,也就是java源文件,当然源文件是给我们人类来编写和阅读的,但是计算机不识别呀,我们亲爱的计算机它只认识二级...

不积跬步无以至千里 485

【Java 】二、Java 代码编译和执行的整个过程

Java 代码编译和执行的整个过程 Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java 字节码的执行是由 JVM 执行引擎来完成,流程图如下所示: Java 代码编译和执行的整个过程包含了以下三个重要的机制: Java 源码编译机制 类加载机制 类执行机制 Java 源码编译机制 Java 源码编译由以下三个过程组成: 分析和输入到符号表...

qwertyuiopasdfghjklzxcvbnm 1109

Java 代码 编译和执行过程

java 编译 执行过程

憧憬的专栏 1万+

java代码编译过程_Java代码编译和执行的整个过程

一、简述Java代码编译和执行的整个过程包含了三个重要的机制:①Java源码编译机制;②类加载机制;③类执行机制二、Java源码编译机制Java代码编译是由Javac编译器来完成,流程如图:Javac是一种编译器,能将一种语言规范转化成另外一种语言规范,通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范,如C/C++或者汇编语言都是将源代码直接编译成目标机器码,这个目标机器代码是CP...

weixin_32420193的博客 800

Java代码编译和执行的过程

Java代码编译和执行的过程 大部分的程序代码转换成物理机的目标代码或虛拟机能执行的指令集之前,都 需要经过上图中的各个步骤。解释型语言走绿色路径,编译型语言走蓝色路径。 对于Java语言: 程序源码到抽象语法树过程由javac完成,生成一个字节码文件。javac可以理解为前端编译器。 Java字节码的执行是由JVM执行引擎来完成,Java语言是半编译半解释型语言。 其中,JIT编译器可以理解为后端编译器。 字节码: 字节码是一种中间状态(中间码)的二进制代码(文件),它比机器码更抽象,需要直译器

qq_47102228的博客 469

java代码从编译到加载执行的过程

在刚接触java时,我们都知道通过javac命令将java源码文件编译成.class字节码文件,这是由编译器来完成的,包括泛型擦除属于编译时期的语法糖。 .class字节码文件是跨平台的,也就是不管什么平台的JVM,都可以加载执行。 类的加载 Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。...

学习 1258

java代码编译过程

简单随笔 java程序需要先编译成class文件然后才能执行,由于是编程成立机器代码,虚拟机加载内存的时候更快的执行。 java文件编译成class文件步骤如下: 1)词法分析,检查每一个关键字单词是否拼写错误 2)语法分析,分析语法是否正确,例如if后面是否有条件判断这种语句的一个检查 3)语法糖分析,java中有一些快捷的语法糖方便开发,会在这个阶段把语法糖还原成原本的语法,例如字符串拼接 “...

weixin_33912638的博客 162
上一篇: maven的package与install命令区别
下一篇: 一段实用的maven pom:将项目依赖打包到文件夹或打入jar中
TheManOfCoding
博客等级 码龄9年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值