/openjdk-jdk8u

OpenJDK jdk8u mirror on master, with selective patches on branch 'dev'. 所有openjdk开源项目在:https://github.com/AdoptOpenJDK

Primary LanguageJavaGNU General Public License v2.0GPL-2.0

README:
  This file should be located at the top of the OpenJDK Mercurial root
  repository. A full OpenJDK repository set (forest) should also include
  the following 6 nested repositories:(翻译:一个完整的OpenJDK应该包括下面6个嵌套的项目:)
    "jdk", "hotspot", "langtools", "corba", "jaxws"  and "jaxp".

  The root repository can be obtained with something like:(hg(Mercurial)类似于git)
    hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk8
  
  You can run the get_source.sh script located in the root repository to get
  the other needed repositories:
    cd openjdk8 && sh ./get_source.sh

  People unfamiliar with Mercurial should read the first few chapters of
  the Mercurial book: http://hgbook.red-bean.com/read/

  See http://openjdk.java.net/ for more information about OpenJDK.

Simple Build Instructions:
  
  0. Get the necessary system software/packages installed on your system, see
     http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html

  1. If you don't have a jdk7u7 or newer jdk, download and install it from
     http://java.sun.com/javase/downloads/index.jsp
     Add the /bin directory of this installation to your PATH environment
     variable.

  2. Configure the build:
       bash ./configure
  
  3. Build the OpenJDK:
       make all
     The resulting JDK image should be found in build/*/images/j2sdk-image

where make is GNU make 3.81 or newer, /usr/bin/make on Linux usually
is 3.81 or newer. Note that on Solaris, GNU make is called "gmake".

Complete details are available in the file:
     http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html
     
     
OpenJDK 源码的目录结构说明:
openjdk 
—— corba:不流行的多语言、分布式通讯接口 
—— hotspot:Java 虚拟机 
—— jaxp:XML 处理 
—— jaxws:一组 XML web services 的 Java API 
—— jdk:java 开发工具包 
—— —— 针对操作系统的部分 
—— —— share:与平台无关的实现 
—— langtools:Java 语言工具 
—— nashorn:JVM 上的 JavaScript 运行时

1. Corba
全称 Common Object Request Broker Architecture,通用对象请求代理架构,是基于 对象-服务 机制设计得。与 JavaBean、COM 等是同种范畴。
目前,通用的远程过程调用协议是 SOAP(Simple Object Access Protocol,简单对象访问协议),消息格式是 XML-RPC(存在 Json-RPC)。 
另外,Apache Thrift 提供了多语言 C/S 通讯支持; 不少语言也内置了跨语言调用或对分布式环境友好,比如: lua 可以与 c 代码互调用,
go 可以调用 C 代码,erlang 在本地操作与分布式环境下的操作方法一样等。


2. Hotspot
全称 Java HotSpot Performance Engine,是 Java 虚拟机的一个实现,包含了服务器版和桌面应用程序版。
利用 JIT 及自适应优化技术(自动查找性能热点并进行动态优化)来提高性能。使用 java -version 可以查看 Hotspot 的版本。
从 Java 1.3 起为默认虚拟机,现由 Oracle 维护并发布。
其他 java 虚拟机:
    JRockit:专注于服务器端,曾经号称是“世界上速度最快的 Java 虚拟机”,现归于 Oracle 旗下。
    J9:IBM 设计的 Java 虚拟机。
    Harmony:Apache 的顶级项目之一,从 2011 年 11 月 6 日起入驻 Apache 的 Java 项目。虽然其能够兼容 jdk,但由于 
        JCP (Java Community Process)仅仅允许授权给 Harmony 一个带有限制条件的TCK(Technology Compatibility Kit),
        即仅仅能使用在 J2SE ,而不是所有Java实现上(包括 J2ME 和 J2EE),导致了 Apache 组织与 Oracle 的决裂。
        Harmony 是 Android 虚拟机 Dalvik 的前身。
    Dalvik 并不是 Java 虚拟机,它执行的是 dex 文件而不是 class 文件,使用的也是寄存器架构而不是栈架构 。


3. jaxp
全称 Java API for XML Processing,处理 XML 的Java API,是 Java XML 程序设计的应用程序接口之一,它提供解析和验证XML文档的能力。 
jaxp 提供了处理 xml 文件的三种接口:

DOM 接口(文档对象模型解析),位于 \openjdk\jaxp\src\org\w3c\dom
SAX 接口(xml 简单 api 解析),位于 \openjdk\jaxp\src\org\xml\sax
StAX 接口(xml 流 api),位于 \openjdk\jaxp\src\javax\xml
除了解析接口,JAXP还提供了XSLT接口用来对XML文档进行数据和结构的转换。


4. JaxWS
全称 Java API for Web Services,JAX-WS 允许开发者选择 RPC-oriented(面向 RPC) 
或者 message-oriented(消息通信,erlang 使用的就是消息通信,不过 Java 内存模型是内存共享)来实现自己的web services。
通过 Web Services 提供的环境,可以实现 Java 与其他编程语言的交互(事实上就是 thrift 所做的,
任何一种语言都可以通过 Web Services 实现与其他语言的通信,客户端用一种语言,服务器端可以用其他语言)。


5. LangTools
Java 语言支持工具


6. JDK
全称 Java Development Kit。
jdk下的share
    classes 目录里的是 Java 的实现,native 目录里的是 C++ 的实现,两部分基本对应。这两个目录里的结构与 java 的包也是对应,各个部分的用途另外再讲。
    back、instrument、javavm、npt、transport 几个部分是实现 java 的基础部分,都是 C++ 代码,在这里从最底层理解 java,往后这些内容也会详讲。
    sample 和 demo 目录有以下示例,区别在于 demo 目录是 针对 applets 的。

7. Nashorn
Nashorn 项目的目的是基于 Java 在 JVM 上实现一个轻量级高性能的 JavaScript 运行环境。基于 JSR-223 协议,
Java 程序员可在 Java 程序中嵌入 JavaScript 代码。 
该项目使用了 JSR-229 里描述的新连接机制(从 Java 7 起开始使用的连接机制):新的字节码(invokedynamic)以及新的基于方法句柄(method handle)的
连接机制。通过接口注入(interface injection)在运行时修改类也是 JSR-229 里的内容。




hotspot目录结构说明:
├─agent                            Serviceability Agent的客户端实现
├─make                             用来build出HotSpot的各种配置文件
├─src                              HotSpot VM的源代码
│  ├─cpu                            CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现)
│  ├─os                             操作系相关代码
│  ├─os_cpu                         操作系统+CPU的组合相关的代码
│  └─share                          平台无关的共通代码
│      ├─tools                         工具
│      │  ├─hsdis                      反汇编插件
│      │  ├─IdealGraphVisualizer       将server编译器的中间代码可视化的工具
│      │  ├─launcher                   启动程序“java”
│      │  ├─LogCompilation             将-XX:+LogCompilation输出的日志(hotspot.log)整理成更容易阅读的格式的工具
│      │  └─ProjectCreator             生成Visual Studio的project文件的工具
│      └─vm                           HotSpot VM的核心代码
│          ├─adlc                       平台描述文件(上面的cpu或os_cpu里的*.ad文件)的编译器
│          ├─asm                        汇编器接口
│          ├─c1                         client编译器(又称“C1”)
│          ├─ci                         动态编译器的公共服务/从动态编译器到VM的接口
│          ├─classfile                  类文件的处理(包括类加载和系统符号表等)
│          ├─code                       动态生成的代码的管理
│          ├─compiler                   从VM调用动态编译器的接口
│          ├─gc_implementation          GC的实现
│          │  ├─concurrentMarkSweep      Concurrent Mark Sweep GC的实现
│          │  ├─g1                       Garbage-First GC的实现(不使用老的分代式GC框架)
│          │  ├─parallelScavenge         ParallelScavenge GC的实现(server VM默认,不使用老的分代式GC框架)
│          │  ├─parNew                   ParNew GC的实现
│          │  └─shared                   GC的共通实现
│          ├─gc_interface               GC的接口
│          ├─interpreter                解释器,包括“模板解释器”(官方版在用)和“C++解释器”(官方版不在用)
│          ├─libadt                     一些抽象数据结构
│          ├─memory                     内存管理相关(老的分代式GC框架也在这里)
│          ├─oops                       HotSpot VM的对象系统的实现
│          ├─opto                       server编译器(又称“C2”或“Opto”)
│          ├─prims                      HotSpot VM的对外接口,包括部分标准库的native部分和JVMTI实现
│          ├─runtime                    运行时支持库(包括线程管理、编译器调度、锁、反射等)
│          ├─services                   主要是用来支持JMX之类的管理功能的接口
│          ├─shark                      基于LLVM的JIT编译器(官方版里没有使用)
│          └─utilities                  一些基本的工具类
└─test                             单元测试