深入理解java虚拟机(15):编译器介绍
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了深入理解java虚拟机(15):编译器介绍,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1513字,纯文字阅读大概需要3分钟。
内容图文
![深入理解java虚拟机(15):编译器介绍](/upload/InfoBanner/zyjiaocheng/657/946c4d285bb045c4ac646495519828bc.jpg)
前端编译器,把java文件变成class文件字节码,sun的javac,Eclipse JDT中的编译插件ECJ。
JIT,just it time Hotswap的c1,c2把字节码转换成机器码,及时编译器。
AOT编译器:GCJ,JET把java文件变成机器码,静态提前编译器。
虚拟机团队把设计团队把对性能的优化集中到了后端的及时编译器,让许多不是java语言生成的class类文件也同样能享受到编译器优化带来的好处,很多新生的java语法特性是靠语法糖实现的,而不是底层虚拟机改进支持的。
1、javac编译器,java语言实现。
1)词法、语法分析,主要通过com.sun.tools.javac.parser.Scanner类实现,语法分析就是构造抽象语法树的过程,语法树的每一个节点都表示程序代码的一个程序结构,如包、类型、修饰符等。语法树由com.sun.tools.javac.tree.JCTree表示,后续操作都在语法树上操作。
2)填充符号表,符号表是一组符号地址和符号信息组成的表格,符号表将用于语义检查和产生中级代码。由com.sun.tools.javac.comp.Enter实现
2、注解处理器
注解处理器可以对语法树进行修改和添加抽象语法树上的任意元素。如果注解处理器改变了抽象语法树,编译器会回到解析和填充符号表进行处理。通过插件式注解处理器可以实现很多插件功能。java源代码中
插入式注解处理器的初始化过程是在initProcessAnnotations方法中完成,执行过程是processAnnoations中处理,这个判断是否还有新的注解处理器需要执行。如果有的话,通过com.sun.tools.javac.processing.JavaProcessingEnviroment类的doProcessing()方法生成一个新的javacompiler对象编译。
3、语义分析和字节码生成
语义分析主要对结构上正确的上下文有关性质的审查如下图
1)标注检查
变量使用前是否被生明,变量和赋值之间的数据类型是否能够匹配等,还有常量折叠,例如int a = 1+2,编译期间进行常量折叠
2)数据及控制流分析
内容总结
以上是互联网集市为您收集整理的深入理解java虚拟机(15):编译器介绍全部内容,希望文章能够帮你解决深入理解java虚拟机(15):编译器介绍所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。