最新要闻
- 环球通讯!江淮大众退出历史!大众安徽首台预量产车下线:MEB纯电平台、对标Model Y
- ThinkPad X1 Carbon 30周年纪念版开卖:18999元!只有300台
- 环球报道:可换京东100元充值卡:微软奖励积分计划国区上线
- 环球热消息:没钱买车了?乘联会公布11月零售销量:14年来首次“旺季”环比下滑
- 世界热点评!7399元大杀器?AMD RX 7900 XT显卡性能跑分首曝:不及期望
- 小米13 Pro旷野绿至尊套装公布:一整套全是绿的!
- 【天天时快讯】利润减少18亿!宗庆后承诺娃哈哈3万员工工资不降年终奖照发:网友直呼良心
- 焦点资讯:启动性能提升50%!Win11安卓子系统升级Android 13
- 每日看点!宁德时代拿下本田汽车超级大单 2030年前供货123GWh电池
- 全球速读:ChatGPT国产平替出现了:APP商店就能下载 还可给AI加人设
- iQOO 11性能猛挤牙膏:130万跑分、内存秒变24GB
- 一块屏幕同时两种刷新率!iQOO 11支持LTPO4.0+分区高刷
- 最新快讯!领124元神券!蒙牛Nopa燃型低脂纤维奶昔牛乳大促:10瓶35元
- 《阿凡达2》首映后被批了 影评人:剧情没第一部好看!全片冗长、台词沉闷
- 片长190分钟超130万人想看!《阿凡达2:水之道》总票房突破3000万
- 最新消息:Nature最新:熊去氧胆酸可预防新冠、不怕病毒变异
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天快看:13 Javac将源码编译为字节码的过程
- 1 编译器分类
- 2 Javac编译器
- 2.1 Javac简介
- 2.2 Javac与程序开发
- 3 Javac工作过程
- 3.1 解析与填充符号表
- 3.1.1 词法分析
- 3.1.2 语法分析
- 3.1.3 填充符号表
- 3.2 注解处理
- 3.3 语义分析
- 3.3.1 标注检查
- 3.3.2 数据及控制流分析
- 3.3.3 解语法糖
- 3.4 生成字节码
- 3.1 解析与填充符号表
- 4 总结
1 编译器分类
Java的编译过程:将源代码转化成机器可执行的二进制代码。实际上,编译过程,是分阶段进行的,由此产生了不同的编译器。
编译器分类:
类别 | 工作内容 | 代表 |
---|---|---|
前端编译器 | 把源代码转变成字节码 | JDK的Javac、Eclipse编译器(ECJ) |
即时编译器 | 运行时把字节码转变成本地机器码 | HotSpot虚拟机的C1、C2编译器 |
提前编译器 | 直接把源代码编译成与目标机器指令集相关的二进制代码 | JDK的Jaotc等 |
2 Javac编译器
2.1 Javac简介
- Javac是程序猿使用最多的一款编译器,但面向IDE编程使得我们很少直接使用javac,开发工具帮我们自动编译了
- 它由Java编写
IntelliJ IDEA ,支持几种编译器:Javac、Eclipse ECJ、Ajc 等,默认使用Javac
(资料图片仅供参考)
2.2 Javac与程序开发
编译器如何跟程序员打交道?
- 前端编译器对程序效率提升影响极少。虚拟机设计团队将性能优化放在即时编译器中,让那些不是由Javac产生的Class文件(如JRuby、Groovy等语言的Class文件)也能被编译器优化。
- 前端编译器对程序员开发效率提升影响极大:编译器的“语法糖”:泛型、自动拆箱、自动装箱、枚举类、Lambda表达式等特征,简化编码。
3 Javac工作过程
Javac工作过程就是源代码变为字节码的过程。
3.1 解析与填充符号表
3.1.1 词法分析
- 将源代码的字符流转变为标记集合(Token)。
- 单个字符是编码的最小元素,标记是编译时的最小元素。关键字、变量名、字面量、运算符都可以作为标记
- 因此:词法分析就是将源代码拆解关键字。源代码->关键词集合
int a = 100 这句代码包含4个标记,分别是int、a、=、100,虽然关键字int由3个字符构成,但是它是一个独立的标记,不可拆分
3.1.2 语法分析
- 根据标记序列构造抽象语法树(AST)
- 每一个节点代表代码中的一个语法结构,例如包、类型、修饰符、运算符、接口、返回值等
- 源代码->关键词集合->语法树
注意:生成语法树以后,编译器后续的操作都是基于语法树,不再操作源码
AST View 插件生成抽象语法树:
上图看着复杂,换个图ps:我没分析javac源代码,借用网图:java编译器源码解析-语法分析(1)
3.1.3 填充符号表
先理解符号概念,参考:java编译器源码解析-语义分析-填充符号表
一、 符号是什么?
- java声明一个类,类中有属性和方法,计算机识别为符号;
- 符号有名称,如:类名、方法名、属性名;
- 符号有类型,如:int a=0;a是一个变量,但编译器认为a是一个VarSymbol,它的类型是JCPrimitiveType
二、符号表什么时候生成?生成语法树之后
三、符号地址代表什么?内存地址,在目标代码生成阶段,会对符号名进行地址分配
四、符号内容有什么?地址、内容
五、填充前后有什么变化?在语法树的基础上进一步完善信息
填充符号表
- 生成一组符号地址和符号信息构成的数据结构(类比哈希表中键值对)
3.2 注解处理
插入式注解处理器,编译期间处理注解,读取,修改,删除语法树中的任意元素,编译器会根据修改与否,重新回到解析及符号表填充阶段进行处理。
Lombok:基于插入式注解处理器实现的插件,修改语法树元素CheckStyle、FindBug、Klocwork:遍历和分析语法树,分析代码质量
3.3 语义分析
对语法树进行逻辑验证
3.3.1 标注检查
变量是否先声明后使用、变量类型与值对否匹配
常量折叠:“a=1+2”优化为“a=3”
3.3.2 数据及控制流分析
检验:局部变量先赋值后使用、方法的每条路径是否都有返回值
跟类加载时的校验过程类似
3.3.3 解语法糖
java虚拟机不支持泛型、装箱、拆箱、变长参数等语法解语法糖:编译阶段还原到基础语法结构
3.4 生成字节码
将语法树、符号表转化成字节码指令,生成.class文件将实例构造器
4 总结
Javac编译过程各节点及说明:
Javac编译过程中的主体代码及其功能:
天天快看:13 Javac将源码编译为字节码的过程
每日精选:数据安全新战场,EasyMR为企业筑起“安全防线”
环球通讯!江淮大众退出历史!大众安徽首台预量产车下线:MEB纯电平台、对标Model Y
ThinkPad X1 Carbon 30周年纪念版开卖:18999元!只有300台
环球报道:可换京东100元充值卡:微软奖励积分计划国区上线
环球热消息:没钱买车了?乘联会公布11月零售销量:14年来首次“旺季”环比下滑
世界热点评!7399元大杀器?AMD RX 7900 XT显卡性能跑分首曝:不及期望
热讯:AI绘画,画你心中所想!【飞链云版图】,圆你心中所梦!
小米13 Pro旷野绿至尊套装公布:一整套全是绿的!
【天天时快讯】利润减少18亿!宗庆后承诺娃哈哈3万员工工资不降年终奖照发:网友直呼良心
焦点资讯:启动性能提升50%!Win11安卓子系统升级Android 13
每日看点!宁德时代拿下本田汽车超级大单 2030年前供货123GWh电池
全球速读:ChatGPT国产平替出现了:APP商店就能下载 还可给AI加人设
速看:【智能PDU】智慧网络远程电源开关管理系统
全球短讯!Python中12个常用模块的使用教程
你知道“智慧城市”是什么吗?
前沿资讯!NOIP2022第二题喵了个喵题解与SPJ
视点!libmongoc库和libbson库的使用
iQOO 11性能猛挤牙膏:130万跑分、内存秒变24GB
一块屏幕同时两种刷新率!iQOO 11支持LTPO4.0+分区高刷
最新快讯!领124元神券!蒙牛Nopa燃型低脂纤维奶昔牛乳大促:10瓶35元
《阿凡达2》首映后被批了 影评人:剧情没第一部好看!全片冗长、台词沉闷
Redis这个内存回收,确实有点牛逼!!!
Azure Devops 流水线任务插件开发教程 (1/3) —— Quick Start
滚动:一行代码 网页变灰
百度爱番番基于图技术、流式计算的实时CDP建设实践
世界微速讯:PDF转Word完全指南:3大方法满足各种场景!
Win10无Internet访问权限怎么解决?无Internet访问权限的原因
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
京东怎么分期付款?京东怎么看一共花了多少钱?
photoshopcs4序列号有哪些?pscs4的永久序列号分享
【天天报资讯】云边协同下的统一应用管理: 基于 OpenYurt 和 KubeVela 的解决方案
苹果手机显示iPhone已停用怎么办?iphone已停用是什么意思?
全球速读:行为管理(锐捷无线篇)
环球热议:app提交上架最新流程 ios
热讯:RFID读写器与西门子PLC 1200的tcp通信
C++的语法 学习笔记1
今日讯!聊聊与前端工程师天然互补的 Serverless
片长190分钟超130万人想看!《阿凡达2:水之道》总票房突破3000万
最新消息:Nature最新:熊去氧胆酸可预防新冠、不怕病毒变异
世界热门:骁龙8 Gen2价格屠夫!moto X40系列定档12月15日
环球讯息:南京一地铁口被大量共享单车堵死 密密麻麻场面壮观:大家应文明骑行规范停车
今日最新!家长注意!羽绒服会让儿童安全座椅失效:有致命危险
世界热门:CVE-2015-4852 Weblogic T3 反序列化分析
全球实时:新能源车爆发 锂矿价格翻10倍 宁德宜春等多城提出打造“锂都”
资讯:降多少你会买?消息称RTX 4080要降价几千 首发用户将受伤 会有赔偿吗?
走后门上班?马斯克两位堂兄弟入职推特 成全职员工
天天热点!一张照片立即变视频主角 “AI换脸”惹上事 女子获赔5000元
东北零下20度 男子雪碧放车里一晚被冻炸:按键都不好使了
环球视点!厉害!韩国所有人将至少年轻1-2岁:网友看完方法直呼意外
天天微资讯!30年老司机成功预判避免车祸 当事人:本能反应 预感到它们刹不住
每日看点!日本最好大学东京大学2022年校花冠军出炉引网友热议 甜美可爱的学霸妹子
视讯!OpenGL 透明度
大数据量、高并发业务怎么优化?(一)
每日简讯:第一次看到水冷的RX 7900 XTX:漂亮得不像话
环球微头条丨新一代显卡危机 《传送门》光追性能实测:卡成1帧PPT、RTX 4090惨败
全球首款第二代骁龙8+2K直屏旗舰!iQOO 11今天发
一到冬天就黑屏!但是 大众好像根本就不打算管
天天快资讯:python中的函数进阶
实时焦点:C++入门级基础知识汇总
天天微资讯!Arc显卡也能战未来 Intel新驱动实测:性能提升真打鸡血
大中华区立功 消息称马斯克将任命朱晓彤特斯拉全球CEO
当前最新:JavaWeb三大组件(Servlet、Filter、Listener)
世界报道:蓝牙协议(HFP、HSP、A2DP、AVRCP)简介
大前端html基础学习04--文本溢出
热推荐:电动车生产基地杀到欧洲?比亚迪最新回应来了
天天日报丨无2D版!《阿凡达2》预售开启:平均票价68元 首映口碑好评爆棚
【世界新要闻】备受年轻人追捧的“网红餐厅”有多坑?不服不行
环球即时:Springboot处理跨域请求
shell编程时出现:未预期的符号 `then' 附近有语法错误 或者 : 行 : `then'
世界最新:CSS Margin中5个经典布局解决方案,重难点知识,记得收藏复习
快播:实火!《阿凡达2:水之道》预售首日总票房突破千万
小米13系列发布会时间偷跑 最新售价信息曝光:3999/4999元起售
天天头条:中国石化又一次产出99.999%高纯度氢:每年2100吨
即时看!12306购票页面变了:已取消查验核酸弹窗
天天观热点:双11期间快递达42.7亿件 你的收到了吗?
【快播报】员工爆料奶茶店用过期原料 老板:事儿太多
【全球热闻】刘海屏iPhone用上灵动岛:越狱软件开发者推出“灵动刘海”
路怒可怕!出租车插队未果隧道逼停保时捷 还质问开豪车了不起:罚600扣1分
节省1000元成本 特斯拉减配辅助停车的超声波雷达:把新车主们坑惨了
暴雪《魔兽世界》停服或致大量游戏工作室倒闭:代打行业寒冬
加绒款同价:361° 纯色卫衣/运动裤69元大促(40元券)
Intel晒新显卡驱动表现:DX9游戏性能提升达80%
每日快播:一键部署应用到远程服务器,IDEA 官方 Docker 插件太顶了!
Vue视频 | 【Vue2 + Vue3 前端教程】完整版
今日关注:记录--微信小程序获取用户信息的最新方法记录
当前短讯!12 虚拟机字节码执行引擎_字节码执行机制
CompletableFuture源码解析
全球限量5000台!ThinkPad X1 Carbon 30周年纪念版即将上市
最新资讯:老马也失蹄 吞剑大师嘴插5把剑出意外被刺穿内脏:宣布收山
NASA毅力号火星车和国际空间站上的SSD:出自群联之手
网友不知情下话费暴涨2倍至99元 客服:一般会提前通知
每日快讯!Redis配置、优化及相关命令
《阿凡达》为何时隔13年推出续作?卡梅隆回应:光剧本就写了4版
全球时讯:纯电越野车真香!奇瑞也来参一脚:邀网友共创、最多奖励5万
每日视讯:一天1500元 索赔77万元代步车费用!博主曝特斯拉“精彩”上诉状
黄牛栽了!急于出手RTX 4080
两轮电动车在印度卷起来了:5年/6万公里质保、1年免费充电
Power BI 15 DAY
【高精密时钟】NTP网络校时服务器在WIN平台下调试步骤