曾几何时,所谓 Oracle要对Java收费的新闻,在网上传得沸沸扬扬。这个新闻被专业人士视为标题党,而国内众多技术论坛,比如某乎社区上,有很多大神对 Java收费 这个说法做出了非常专业的解读,笔者这里就不班门弄斧了,Bing 搜索引擎根据“Oracle Java收费”的关键字搜索,第一条搜索结果就很值得一读。

本文想论述的重点,是介绍JDK,Oracle JDK, Open JDK和SAP JDK这几个名词的关系。

JDK - Java Development Kit

Java编程语言的软件开发工具包,是 Java 开发的核心,包含了Java运行环境即JVM(Java Virtual Machine)和Java系统类库,以及大量工具。

笔者以前在 SAP 德国总部和 CRM 开发团队一位拥有 20 年ABAP编程经验的德国老同事闲聊,谈到近些年来越来越多的SAP产品技术栈换成了Java,这位同事从没接触过Java,好奇地问我啥是 JDK.

我当时给他的解释是(为了节省篇幅,笔者这里就不放英文了),“想想你在 SAPGUI 里编写的 ABAP 代码,激活后运行在C/C++实现的ABAP运行时(runtime)也就是ABAP虚拟机里。”

“另外,Netweaver ABAP平台提供了很多基础设施层面的功能,比如用于HTTP通信的CL_HTTP_CLIENT和CL_HTTP_SERVER, ABAP里有很多这种类库,都存储在BASIS这个包和它的子包下面。所以ABAP Development Kit就是ABAP运行时和ABAP类库的组合,而JDK就是Java运行时和Java类库的组合,就这么简单。”

看到德国同事露出了理解后的笑容,笔者心想,有一点我没告诉你,和ABAP这种Server Side的开发模式相比,用Java开发企业级应用免不了在本地搭各种开发环境,因此 Java开发人员要有在本地搭环境时可能会遇到各种各样问题的心理准备。当初笔者的朋友吴脊 2015 年加入 SAP 成都研究院时,Jerry 作为他的导师,一起在本地搭一个 Java 开发环境,最后花了一周的时间才搭好。在那一周的时间里,下面这句话,Jerry 说了起码不下十次:

在我电脑上是好的。

Oracle JDK

创建了Java编程语言的 Sun 公司,于2009年以74亿美元的白菜价被Oracle收购之后,越来越多的Java初学者将Oracle JDK等同为JDK. 这并不奇怪,毕竟Google JDK关键字,位于搜索结果前列的全是www.oracle.com开头的页面:

由于Oracle和SAP的关系(SAP从业者都懂的),在Oracle旗下的Java传出“要收费”的消息后, 一部分使用Java进行二次开发的SAP从业者们心里不免感到紧张,其实大可不必。

还记得笔者读本科的时候,一心想干掉 Java 的微软曾经搞出一个叫做J++的编程语言,以及对应的Visual J++这个IDE. 不过当时笔者就读的电子科大计算机学院的编程课全用的C/C++,我周围认识的同学们也没人捣鼓这个语言。这个 J++ 虽然有着和Java相同的语法和关键字,但是只能运行在微软的操作系统上,后来据说山寨了Java的微软被 Sun 告了,赔了20亿美元,然后就没有然后了。

有意思的是,后来微软发布了一封公开信:

原文如下:

这封信是发给Open JDK社区的,微软首先宣布自己正式加入Open JDK社区,动机之一是因为微软有越来越多的产品和服务需要依赖于Java, 比如Azure上的Java Runtime. 正如笔者最近工作的一个项目用到的SAP Commerce Cloud on Azure,就是这种依赖的受益者。

接着微软在公开信中,低调地承认Oracle是Open JDK项目的大佬,自己的团队加入Open JDK社区后,会从小bug修复和功能backport入手,努力成为一名社区好公民。果然英雄所见略同,以前Jerry的开发团队每当加入一个新产品的开发大家庭之初,也是通过修bug和做downport来掌握开发知识和熟悉流程的。

信中最后一句话:We look forward to participating in the future of Java —— Java的未来,微软也期望参与其中。

所以,这个Open JDK到底是什么鬼?

官网:https://openjdk.java.net/

Open JDK是Sun在2006年末把Java开源而形成的项目,而Oracle JDK是基于Open JDK的商业实现。Open JDK和Oracle JDK的关系,好比 Open UI5和SAP UI5, Kyma和SAP Cloud Platform Extension Factory一样。

java -version的输出如果看到出现了HotSpot,说明是Oracle JDK:

而Jerry的阿里云 ECS 上,输出则是Open JDK:

说了这么多,和SAP有啥关系?

大家可以访问这个公网链接:https://sap.github.io/SapMachine/

SAPMachine,是一个SAP基于Open JDK打造的JDK,在前者的基础上,SAP针对企业级应用需要的可支持性(supportability)和可靠性(reliability)等方面做了增强。

SAPMachine既可以在上述github链接里下载,也可以在SAP官网下载:

像SAP这样基于Open JDK之上为自己的企业量身定做一个JDK出来的做法在业界非常普遍。

比如亚马逊的Corretto,源代码地址:
https://github.com/corretto

还有国内阿里巴巴的AJDK: Dragonwell

可以说阿里的解决方案之所以能经受诸如双十一这样对高并发高可用性要求极高的严酷场景下的考验,阿里自己的JDK功不可没。

下面一段话来自阿里云栖社区一篇帖子:

支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了什么?

最早从2010年,阿里巴巴就开始了基于OpenJDK6的JVM定制优化工作,这也是国内第一个优化、定制且开源的服务器版Java虚拟机。2015年开始,阿里巴巴JVM团队开始着手在OpenJDK8进行优化和定制工作,力求在稳定性,性能优化,以及技术前瞻性方面,满足阿里巴巴,蚂蚁金服,以及菜鸟快速发展的业务需求。定制的版本被命名为AJDK(Alibaba JDK),目前淘宝、天猫,蚂蚁,菜鸟,几乎所有的核心应用都从Oracle JDK切换到了AJDK上,并经过了双11的考验。

希望通过本文的介绍,大家能够对几种不同的 JDK 有一个最基本的了解。

总结

本文首先从 Oracle 要对 Java 收费的新闻聊起,介绍了对于 Java 初学者来说,容易混淆的几个名词,JDK,Oracle JDK, Open JDK 和 SAP JDK 之间的区别和联系。

谈谈 JDK 和 SAPMachine 的关系相关推荐

  1. 两分钟搞懂 JDK 与 JRE 的关系!

    作者:MobMsg,资深全端工程师一枚,架构师社区合伙人! JDK 与 JRE 的关系用一张图就可以诠释的非常清楚,把这张图深深记进脑子里,目标就达成50%了 若您有遇到其它相关问题,非常欢迎在评论中 ...

  2. JDK与JRE的关系和path的作用浅谈

    JDK与JRE的关系和path的作用浅谈 摘要:JDK与JRE的关系以及path的配置对于初学者是要明白的问题,那么具体的JDK与JRE的关系是什么呢?那么本文讲给你简单介绍. 标签:JDK与JRE关 ...

  3. Jdk 和 jre 的 关系和区别

    Jdk 和 jre 的 关系和区别 区别: JDK:是Java Development Kit 的简称–>翻译过来就是:Java 开发工具包.是程序员使用java语言编写java程序所需的开发工 ...

  4. jdk 8 、9 10 11 12 13 14和 jdk 1.8 什么关系??

    五.jdk 13 和 jdk 1.8 什么关系 jdk 8 就是 jdk 1.8 jdk9 就是 jdk 1.9 其他同理 官方虽然更新的快,但是大多数公司,为因为习惯问题和调整的麻烦,在加上 jdk ...

  5. jdk和java什么关系_jdk与java的关系是什么

    jdk是什么? jdk是对java基础环境和相应开发平台标准和工具包的封装(zip). 开发平台: j2se.j2ee.j2me 环境: 虚拟机.运行环境 jdk与java的关系 JDK是整个JAVA ...

  6. jdk和Eclipse的关系

    jdk和Eclipse的关系如下: JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Ja ...

  7. JAVA基础-jdk和jre的关系和区别

    JAVA基础-jdk和jre的关系和区别 1.名词介绍 JDK(Java Development Kit)是Java开发工具包,里面包含Java的开发环境(提供了编译器javac等工具,用于将java ...

  8. day01--java基础编程:计算机基础知识 ,java语言概述,java开发环境搭建,eclipse概述,创建简单java项目,JDK JRE JVM的关系,java开发中的命名规范,编程风格

    1 Day01–Java开发环境+HelloWorld 1.1 计算机基础知识 资料下载网址:刘沛霞 18600949004 code.tarena.com.cn tarenacode code_20 ...

  9. java伪唤醒,谈谈JDK线程的伪唤醒

    在JDK的官方的wait()方法的注释中明确表示线程可能被"虚假唤醒",JDK也明确推荐使用while来判断状态信息.那么这种情况的发生的可能性有多大呢? 使用生产者消费者模型来说 ...

  10. jdk jre jvm的关系

    http://blog.csdn.net/gaopeng0071/article/details/9914683 JDK : Java Development ToolKit(Java开发工具包).J ...

最新文章

  1. 自回归与非自回归模型如何兼得?预训练模型BANG或许可解
  2. 如果你还记得我[转载]
  3. 那些你不知道的单词小秘密
  4. LVS入门篇(二)之LVS基础
  5. 2345王牌浏览器网页加载慢怎么办 网页加载慢解决办法
  6. JEECG Online Coding 开发流程
  7. 从零开始学Node.js(二)
  8. Android多媒体整体架构图
  9. 面试官:你对Redis缓存了解吗?面对这11道面试题是否有很多问号?
  10. IntelliJ IDEA lombok插件的安装和使用
  11. 【CloudXNS教您几招】如何让多ip域名配置游刃有余?(2)
  12. Short, Integer, Long缓存
  13. C# 关于浏览器——CefSharp篇
  14. 【JAVA】RequestResponse
  15. 程序员加班看不上球赛崩溃,外卖小哥伸出援手:我帮你改代码
  16. 小学计算机教师业务笔记,信息技术教师业务学习笔记
  17. word2vec的经验总结
  18. python语言-实现半自动爬虫爬取小说《遮天》评论
  19. 华为云CDN加速服务,如何助企业扬帆远航
  20. Ubuntu20.04用gparted软件给/目录 or /home目录扩容 or 压缩

热门文章

  1. java 汉字占几个字节_Java中一个汉字占用几个字节
  2. 19n20c的参数_供应IC芯片 745653-3 329056 品牌、价格、PDF参数 - 电子产品资料
  3. 外卖程序_淘宝客系统_淘客小程序-淘客系统,外卖返利程序,外卖程序,返利程序
  4. 将图片型pdf转成可选中文字型pdf(免费)
  5. EV录屏怎么实现选区录屏
  6. SCI期刊分区介绍 / 中国科学技术信息研究所SCI(E)论文期刊分区列表——2017年-2020年-文件分享
  7. python开发mbus程序_一种PMBus总线电源模块的控制与实现
  8. 汇编语言典型例子详解_汇编语言常见例子
  9. matlab仿真的五个步骤,matlab仿真步骤
  10. oracle erp 操作手册,OracleERP操作手册