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

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

JDK - Java Development Kit

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

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

我当时给他的解释是(为了节省篇幅,Jerry这里就不放英文了),“想想你在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类库的组合,就这么简单。”

看到德国同事露出了理解后的笑容,Jerry心想,有一点我没告诉你,和ABAP这种Server Side的开发模式相比,用Java开发企业级应用免不了在本地搭各种开发环境,因此Java开发人员要有在本地搭环境时可能会遇到各种各样问题的心理准备。当初Jerry的朋友吴脊老师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从业者们心里不免感到紧张,其实大可不必。

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

有意思的是,刚刚过去的十月末,微软发布了一封公开信:

原文如下:

这封信是发给Open JDK社区的,微软首先宣布自己正式加入Open JDK社区,动机之一是因为微软有越来越多的产品和服务需要依赖于Java, 比如Azure上的Java Runtime. 正如Jerry最近工作的一个项目用到的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的阿里云上,输出则是Open JDK:

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

大家可以访问这个公网链接.

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有一个最基本的了解。对于本文题目引号中的伪命题,相信大家心中已经有答案了。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

Oracle要对Java收费了,SAP基于Java技术栈的那些产品的客户怎么办相关推荐

  1. java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台

     详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘   ...

  2. 基于Python技术栈的算法落地踩坑

    背景介绍 在一些业务场景,我们需要把离线训练好的模型以微服务部署线上,如果是简单的使用sklearn pipeline,可以保存为XML格式的pmml供Java调用, 在配置为4 core,8G内存的 ...

  3. Kubernetes 基于 EFK 技术栈的日志收集实践

    之前写过一篇文章介绍了容器环境下日志管理的原理机制:从 Docker 到 Kubernetes 日志管理机制详解,文章内容偏理论,本文在该理论的支撑下具体实践 Kubernetes 下基于 EFK 技 ...

  4. 基于vue技术栈制作自己的简历网站问题总结篇(入门vue基础项目)

    前言 目前在学习vue技术栈的同时接触到了很多以前没用过的各种工具(如webpack,npm,git等等),配合着vue全家桶里的一些东西做了一个基于vue的个人简历网站(虽然用vue框架搭简历网站优 ...

  5. java swing 皮肤_基于Java Swing开发好看的皮肤

    先介绍几款开源及商业的皮肤. Weblaf:非常赞的套件,界面现代.简约.依赖包较少. 有开源也有商业协议,个人最喜欢的皮肤. https://github.com/mgarin/weblaf Pgs ...

  6. 音乐系统java web_一种基于Java⁃Web的音乐管理系统设计

    摘 要: 采用Java⁃Web技术结合音乐管理网站的市场需求设计了一种音乐管理系统.该系统采用Oracle数据库存储数据信息,设计界面美观,具有音乐动态管理和定时响应功能,克服了传统网站操作复杂.收听 ...

  7. java旅游网站毕业论文,基于JAVA技术的旅游网站的开发.doc

    摘要: 这次毕设主要是为了实现基于JAVA技术的旅游网站的开发,方便人们近距离的出行游玩.网站的开发过程中用到了很多方法技术,最主要的是JAVA技术,用于编写后台的功能实现代码:框架采用的是Sprin ...

  8. java字典写实例,基于JAVA的新华字典接口调用代码实例

    基于JAVA的新华字典接口调用代码实例 接口描述:基于JA V A的新华字典接口调用代码实例 接口平台:聚合数据 import java.io.BufferedReader; import java. ...

  9. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例

    基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...

最新文章

  1. JSP FORM 提交
  2. Android 开发笔记 ListView异步加载图片
  3. HD_2553N皇后问题
  4. [TPYBoard - Micropython之会python就能做硬件 7] 学习使用蓝牙模块及舵机
  5. pmp每日三题(2022年2月25日)
  6. 带你掌握java反序列化漏洞及其检测
  7. wordpress mysql缓存_WordPress 对象缓存与数据库缓存
  8. 在 ESXi 上配置 syslog (2003322)
  9. 2017.11.18
  10. 广东省计算机学校,广东省计算机基础练习平台(高校版)安装设置方法
  11. AI-ISP,是噱头还是真能解决问题
  12. 从.net复制源代码中国农历阵列,必要做日历
  13. 基于Proteus学习单片机系列(一)——点亮LED
  14. 服务器信息 sid,裸金属服务器SID配置
  15. 【题解】Luogu-P4774 [NOI2018] 屠龙勇士
  16. Windows下jupyter notebook的安装和使用
  17. P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)
  18. SQL Server数据库mdf文件中了勒索病毒***.mdf.Horse4444。扩展名变为Horse4444
  19. 华大单片机DDL库与lite库的区别
  20. 如何学ui设计?新手学ui设计难吗?

热门文章

  1. 使用Hexo搭建博客,备份至GitHub过程(基于网上资料的实践操作)
  2. Python 中的 os 模块常见方法?
  3. HTML5 CSS3 Transform 笔记 (scale不起作用)
  4. iOS9 白名单问题 -canOpenURL: failed for URL: xx - error:This app is not allowed to query for scheme x...
  5. HDoj-1874-畅通project续-Dijkstra算法
  6. XML 读写(命名空间)
  7. 关于.net framework 1.1 与 .net framework 2.0的小问题
  8. 为窗体添加 最大化,最小化,还原等 事件
  9. WebAPI(part3)--事件基础
  10. 投资学习网课笔记(part2)--基金第二课