前一阵子公司一个Java系统出现一个奇怪的bug,在Linux中出现,在windows系统中却没有出现。当时让同事收集JDK环境信息,同事用Java -version看到windows和Linux的JDK版本有不同,linux是openjdk,windows是sun jdk。同事于是问我这2者有什么不同。其实2者没有什么大的不同。
Sun Java最开始提供了JVM(java虚拟机)的规范。然后不同的公司根据JVM提供的自己的实现(JRE)。同时为了方便开发,提供了各自的JDK。比如:Jrockit JDK来自Weblogic,Hotspot JDK来自Sun,IBM JDK来自IBM,淘宝JDK来自阿里。后来巨无霸Oracle收购了Sun和BEA,于是Jrockit和Hopspot JDK都归于Oracle所有。大家都知道Oracle是一家专利律师公司,为了怕大家没有开源JDK可用,OpenJDK就从Sun JDK分离出来,专门成为开源免费使用的JDK,具体OpenJDK和Hotspot JDK的关系可以参考:https://gist.github.com/rednaxelafx/925323。
另外唠叨句:在Java7中已经把Jrockit和Hopspot JDK整合了,提供了-client和-server启动选项来获取各自JDK的优点(client用于GUI项目,server用于企业项目)。