七零八碎的JRE

作为开源软件的一个重要组成部分的Java应用,其实Litrin一直很少在本站提及。作为大部分Java应用来说,似乎从底子上就不具备其他开源软件的精神——低耦合、少依赖、短小精悍。还有一方面是尽管项目代码是开源了,但大多数的JRE(Java run time environment) 的核心技术还是锁在几家大头的保险柜里。直到有了OpenJDK……

还是从我的几天前的经历说起,打算安装一个Pentaho环境用于做一些快速报表,于是下载了最新的OracleJ2SE,发觉无法正常工作,找了半天原因无果,误打误撞安装了Ubuntu自带的default-jre应用,反而启动正常。于是乎,深入的了解了一下关于JRE的各种差异,也消除了之前的很多误解。

名词解释:

  • JVM:Java virtual machine,Java虚拟机。可以直接执行Java bytecode的运行环境。
  • JRE:Java run time environment,Java运行环境
  • JDK:Java development kit, Java 开发环境,不同于JRE的是,JDK允许用户将原代码编译成bytecode。用于开发者,当然也可以替代JRE使用。
  • JaveSE:Standard edition 标准环境,EE的子集。
  • JavaEE:Enterprose Edition 企业级环境。
  • JavaME:mobile Edition 原本的移动开发环境,现在也就成了嵌入式开发环境,SE的子集。
  • JavaTCK:technology compatibility kit. 技术性兼容测试程序包。事实上是一个Java代码兼容标准

关于厂商

其实Java更像是JVM的标准,有N多的厂商推出了对应的产品。技术上讲,每一个JVM产品都必须通过TCK包才能算作合格。而由于原来的Sun现在的Oracle,是标准制定者,所以普遍说的JRE大多都是指Oracle的JRE,而OracleJava事实上叫做HotSpot。

需要额外说的是,利用java -version命令,你可以看到 “java version”指的是该软件通过的TCK版本。

root@ilab-os-6105401:~# java -version //openjdk
java version "1.6.0_33"
OpenJDK Runtime Environment (IcedTea6 1.13.5) (6b33-1.13.5-1ubuntu0.12.04)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)
root@ilab-os-6105401:~# /opt/jre1.8.0_25/bin/java -version //oracleJRE
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

Openjdk

原本的Java包含了很多的企业专利授权,不能作为开源软件或者自由软件随意发布的。直到后来Oracle主导,2006年推出了OpenJDK项目,剥离了很多专利(比如用Freetype代替了原有字体);减低了耦合度(比如把默认的JavaDB等用开源的Apache Derby来替代)等,直到所有的代码都符合了Opensoruce的标准并以GPLv2+的方式开源。直到08年以后,openJDK逐步稳定,成为另一个JRE产品。OpenJDK目前只通过了JavaSE6的TCK。

所以说,OpenJDK不是JDK逆向工程,而是一部分的JVM,除了部分特定的配置之外几乎没有差异。当然,由于各种编译器、系统环境、配置导致的差异除外。各个Linux发行版也考虑到方便用户,就将其他的开源应用一并打包发行,例如Ubuntu直接安装default-jre就OK。

OpenJDK的版本

这个是最搞人的东西,最早的openJDK是在JDK的1.7b10的基础上发展来的。经历了几个版本后,到b20去掉了version1.7的features,主打version1.6,推出了openJDK6(下图)。也就是说,OpenJDK6是因为openjdk没有通过1.7TCK,退而求其次通过了1.6TCK的妥协产物。

OpenJDK6-genealogy

 

关于兼容性

严格意义上的兼容性是由通过的TCK版本来确认的。也就是说java version的返回值决定了兼容性,而且大版本之间并不保证兼容。这也就解释了我一开始的问题。

推荐阅读:
任何一个合理的应用程序的运行时
似乎每次开头都要讲述一下计算机
5月中旬,我参加了在加利福尼亚

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据