- package my.test;
- public class Test {
- Test() {}
- }
关于编译流程简短说明的文档也可参考
Peter von der Ahé(javac编译器的主要开发者,前段时间已离开SUN公司)
在“the Open-Source JDK Community”的邮件列表上回复的一封邮件
主题:A set ot tutorials about the compiler
URL :https://openjdk.dev.java.net/servlets/ReadMsg?list=compiler-dev&msgNo=89
1.1.6 在没有任何设计文档的前提下如何分析javac1.7源码?
我只说说我采用的方法(我是第一次分析别人的源代码):
1) 找到一种最简单的办法完成源代码的第一次编译
2) 找到第一个开始运行的类文件(也就是找到切入点)
3) 粗略看一下这个类文件定义了哪些字段,有构造方法的话,
粗略看一下构造方法中做了哪些初始化工作
4) 要是定义的字段、构造方法太多,把它们都copy一份,单独放到一个文件
5) 找到第一个被运行的方法,
在方法开头和末尾打上Debug(包装System.out.println()后写成的一个类),
觉得关键的字段(或局部变量),用自己喜欢的方式也打上Debug,
如果类文件源码超过200行(javac1.7源码中有许多核心类文件大多超过1000行),
为了切换方便,把这方法copy一份,单独放到一个文件
6) 当在一个方法中调用了另一个类的方法时,转到3)
7) 当一个类文件中定义的方法有85%都已Debug过了,从头到尾细细分析一遍类文件
8) Debug的输出信息最好重定向到一个自定义的文件
9) 方法中有复杂算法时最好用笔画在纸上
10)有很多个方法同时来回调用时,把每个方法按调用的顺序单独打开,对照Debug
信息一起看(我经常打开5、6个EditPlus窗口实例同时看20几个类文件)
11)记住随心所欲地想把一个个类文件不打Debug、不按流程顺序分析,是非常低效
的一种方法,除非这个类文件很独立,只是简单的字段值存取功能。
1.2:安装
1.2.1 运行环境
我的OS是Windows XP
建议安装JDK1.6,我的JDK版本是
-------------------------------
java version "1.6.0-beta2"
Java(TM) SE Runtime Environment (build 1.6.0-beta2-b86)
Java HotSpot(TM) Client VM (build 1.6.0-beta2-b86, mixed mode, sharing)
-------------------------------
安装JDK后,请在系统变量Path中加入 %JAVA_HOME%\bin,
其中%JAVA_HOME%是JDK安装目录。
1.2.2 下载javac1.7源码
下载地址:
http://www.java.net/download/openjdk/jdk7/promoted/b10/compiler-7-ea-src-b10-21_mar_2007.zip
解压后会有一个“compiler”目录,
如果你习惯使用Ant、NetBeans或其他IDE工具编译源码,请直
接参考“compiler\README.html”文件,然后跳到“第1.3节”;
如果你像我一样不会用(或不想用)IDE或想操控一切,
请按下面的简单步骤操作:
1.2.3 下载附件中的"Javac.jar"文件,解压到一个目录(这里以“F:\Javac”为例)
(注:"Javac.jar"文件只包含了“compiler\src\share\classes”目录下的
两个子目录“com”与“javax”,其他子目录或文件都是我自建的,javac1.7源码中
还包含了无数的测试用例,我觉得它太繁琐了,就自己一边看源码,一边写自己的
测试例子,所以我把它省略掉了)
1.2.4 编译javac1.7源码
打开一个Dos命令行窗口,切换到“F:\Javac”目录
输入“com”按回车,稍等片刻就可以完成编译
1.2.5 用javac1.7编译其他java源文件
打开一个Dos命令行窗口,切换到“F:\Javac”目录
输入“run”按回车,打开“F:\Javac\myout.txt”文件,就可以看到Debug信息。
在F:\Javac\run.bat文件中默认是编译F:\Javac\bin\mysrc\my\test\Test.java文件
你可以随意替换成你自己的java源文件
1.2.6 javac1.7源码的切入点是F:\Javac\com\sun\tools\javac\Main.java文件
1.3:几个有帮助的网址
James Gosling 的blog:
http://blogs.sun.com/jag/
Peter von der Ahé 的blog:
http://blogs.sun.com/ahe/
the Open-Source JDK Community:
http://openjdk.java.net/
The Java Language Specification, Third Edition:
http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html
The JavaTM Virtual Machine Specification Second Edition
http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html
<<深入Java虚拟机(原书第2版)>>
作者:Bill Venners
译者:曹晓钢,蒋靖
书译得还可以,不过还是有很多印刷错误,
第6章和附录对理解代码生成有一定价值。
中文版地址:
http://www.china-pub.com/computers/common/info.asp?id=14719
Bill Venners维护的网站:
http://www.artima.com/insidejvm/resources/
JDK6的文档(特别是语言新特性部分)也有参考价值
相关推荐
本资源提供的"javac1.7源代码"是一个完全版,包含了OpenJDK 1.7版本中的javac编译器的源代码。OpenJDK是一个开源实现的Java平台标准版(Java SE),它提供了Java虚拟机(JVM)、类库以及Java语言编译器等关键组件。 ...
5. 验证:通过在命令行输入`java -version`和`javac -version`,检查Java和Java编译器的版本,确认安装成功。 OpenJDK 1.7.0 u80的关键特性包括: 1. 字符串in-place替换优化:提升了字符串替换操作的效率。 2. ...
《深入剖析OpenJDK 1.7源码》 OpenJDK 1.7源码是Java开发领域的重要参考资料,它揭示了Java平台的核心运行机制,对于开发者来说,理解和研究OpenJDK源码有助于提升编程技能,优化代码性能,以及解决实际问题。src....
《OpenJDK 1.7源码解析:深入理解Java虚拟机与运行机制》 OpenJDK 1.7源码是Java开发人员探索Java虚拟机(JVM)内部工作原理的重要参考资料,它包含了Java开发工具集(JDK)的核心组件和实现。OpenJDK是一个开源...
JDK包含了开发和运行Java应用程序所需的所有工具,包括Java编译器(javac)、Java虚拟机(JVM)、Java运行时环境(JRE)以及各种实用工具和API。对于开发者而言,它是一个基础性的开发工具包。 OpenJDK 1.7版本引入...
OpenJDK是Java Development Kit(JDK)的一个分支,它包含了Java运行环境(JRE)、Java编译器(javac)和其他必要的开发工具。 在"openjdk-1.7.0-u80-windows-amd64-new.zip"这个压缩包中,我们主要会找到以下几个...
2. `bin` 目录:存放着各种命令行工具,如`javac`(Java编译器)、`java`(JVM执行器)和`jar`(打包工具)等。 3. `lib` 目录:包含了Java库文件,如类库和API文档。 4. `docs` 或 `doc` 目录:可能包含OpenJDK ...
JDK提供了javac编译器,用于将Java源代码转换为字节码,以及各种工具,如Javadoc(生成API文档)、jar(打包类文件)和junit(单元测试)等。 **安装和使用openJDK-7** 在Linux环境下,解压openJDK-7.tar.gz通常会...
OpenJDK-7与Oracle JDK在功能上基本一致,但OpenJDK是开放源代码的,对于那些希望查看源码或者对Java技术进行研究的开发者来说,OpenJDK具有一定的优势。然而,由于OpenJDK可能没有Oracle JDK那样频繁的更新,所以在...
Oracle JDK 7的支持已经结束,但OpenJDK 7作为一个开源替代品仍然可以获取和安装。以下是一个详细的安装指南: 首先,我们需要更新系统软件包列表,确保我们能够获取到最新的依赖项和更新。打开终端并输入以下命令...
"aosp" 是 Android 开放源码项目(Android Open Source Project)的缩写,这意味着这个 OpenJDK 版本与 AOSP 的开发流程紧密相关。 至于压缩包内的文件“openjdk1.7.0_151-amd64”,这很可能是整个 OpenJDK 实现的...
JDK包含了Java运行时环境(JRE)以及开发Java应用程序所需的工具,如编译器(javac)、调试器(jdb)和文档生成器(javadoc)等。 OpenJDK 7的特性包括: 1. **多线程改进**:例如,引入了Fork/Join框架,可以更...
在开发环境中,JDK 1.7可以与其他Java版本共存,因为每个版本都有自己的独立的环境变量配置。然而,对于较旧的应用程序,可能需要保持与特定版本的兼容性,所以选择合适的JDK版本至关重要。 总之,JDK 1.7在提升...
在 OpenJDK 的 `javac1.7` 版本中,我们可以看到 Java 7 时代的编译技术。这个时期的 Java 已经包含了诸如钻石操作符( Diamond Operator)、多重捕获(Multi-Catch)和静态导入(Static Import)等新特性。通过阅读...
本文详细介绍了在 Linux 系统中解决“Error running javac compiler”错误的具体步骤,包括配置 Apache Ant 环境变量、检查和修复 JDK 的安装与配置等问题。通过这些步骤,可以有效确保 Java 应用程序能够在 Linux ...
4. 验证安装成功,通过命令行输入`java -version`和`javac -version`检查Java运行时和编译器的版本。 在开发环境中,JDK1.7.0_79可用于编译和运行Java 7及之前的代码,但请注意,随着Java版本的不断更新,某些新...
虽然题目提及的是JRE,但JDK(Java Development Kit)是包含JRE的,还包括Java编译器(javac)、调试器(jdb)和打包工具(jar)等开发者工具,用于编写、编译和测试Java程序。 总结来说,JRE 1.7安装后的文件夹...
在本文中,我们将详细探讨如何在CentOS 6.5操作系统上安装JDK,包括1.6、1.7和1.8这三个64位...同时,考虑使用OpenJDK作为替代方案,它是一个开源的JDK实现,同样兼容Java标准,并且在许多情况下与Oracle JDK性能相当。
它包括Java编译器、调试器、类库和Java运行时环境(JRE)。在这里提到的"jdk17",指的是Java 17版本,这是Oracle公司发布的长期支持(LTS)版本,意味着它将得到更长时间的安全更新和技术支持。 JDK17为开发者带来...