网站: JavaEye 作者: zhh2007 发表时间: 2007-05-30 23:51 此文章来自于 http://www.iteye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://www.iteye.com/topic/84833
(openJDK)Javac1.7编译器源码分析_001_简介与安装 1.1:简介: 1.1.1 javac版本 SUN公司在2006年11月份已将java语言编译器(javac)源码通过GPLv2的方式开源,
a 看编译原理的书理论太多,想找个实际的编译器验证一下理论
a 编译原理的知识基本上忘记了不要紧, b 知道基本的java语言语法, c 越有耐心越好
javac1.7的源代码本身是用java语言写的(用编译原理的术语叫“自举”), 在James Gosling的blog上有一篇文章: JDK1.6中的javac与开源的javac1.7生成的字节码几乎没有差别,这也肯定了一点: 在“the Open-Source JDK Community”的邮件列表上也有一封邮件证实了这一点:
javac1.7的编译流程可以简单分为以下主要阶段: 1) javac命令行选项及选项参数处理 这一阶段主要是识别javac命令行选项是否是合法的,选项参数是否正确
从头到尾分析源文件的字符流,形成关键字、标识符、数字、运算符等等
词法分析在javac1.7中其实是做为语法分析阶段的一个过程(或方法)来
一个包、一个类、一个方法、一个字段都可以抽象成一个符号(symbol), 这一阶段的任务就是识别出各类符号,并对不同种类的符号按
这一阶段主要是检查final类型的字段与方法中定义的局部变量是否被赋值
在Java 5之后增加了很多语言新特性,但是JVM规范却没有什么变动, 9) 代码生成 构造常量池、筛选指令、生成class文件。
错误处理贯穿编译流程的所有阶段
比如:(例子不考虑人的因素,只考虑编译器的行为):
java 代码
用javac1.7或JDK1.6.0生成的字节码如下(部分内容) 理想的优化编译器应该能生成如下类似的代码:
java 代码
java 代码
关于编译流程简短说明的文档也可参考
我只说说我采用的方法(我是第一次分析别人的源代码): 5) 找到第一个被运行的方法, 6) 当在一个方法中调用了另一个类的方法时,转到3) 10)有很多个方法同时来回调用时,把每个方法按调用的顺序单独打开,对照Debug 11)记住随心所欲地想把一个个类文件不打Debug、不按流程顺序分析,是非常低效
1.2:安装 1.2.1 运行环境 我的OS是Windows XP 建议安装JDK1.6,我的JDK版本是 安装JDK后,请在系统变量Path中加入 %JAVA_HOME%\bin,
下载地址:
打开一个Dos命令行窗口,切换到“F:\Javac”目录
打开一个Dos命令行窗口,切换到“F:\Javac”目录 1.2.6 javac1.7源码的切入点是F:\Javac\com\sun\tools\javac\Main.java文件
1.3:几个有帮助的网址 James Gosling 的blog: Peter von der Ahé 的blog: the Open-Source JDK Community: The Java Language Specification, Third Edition: The JavaTM Virtual Machine Specification Second Edition
书译得还可以,不过还是有很多印刷错误, 中文版地址: Bill Venners维护的网站:
|
《 (openJDK)Javac1.7编译器源码分析_001_简介与安装 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
推荐相关文章:
正确认识memcached的缓存失效
ThreadLocalizer
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA