今年年初的时候,所谓“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. PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品,产品设计严格遵循国际数据挖掘标准CRISP-DM(跨行业数据挖掘过程标准),具备完备的数据准备、模型构建、模型评估、模型管理、海量数据处理和高纬数据可视化分析能力。

    http://www.meritdata.com.cn/article/90 PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品, ...

  2. 从开发一款基于Vue技术栈的全栈热重载生产环境脚手架,我学到了什么

    浏览文章前 这一期,我分享给大家三点看源码的小技巧,这也是从别的大佬那总结的. 被反复使用的代码 这样的代码是一个软件的重点函数,一个大神的写法有很多精华值得学习. 穿越时间的代码 如果一段代码10年 ...

  3. Java架构师需要掌握的技术栈

  4. Java NIO 机制分析(一) Java IO的演进

    一.引言 Java1.4之前的早期版本,Java对I/O的支持并不完善,开发人员再开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要有以下一些问题: (1)没有数据缓冲区,I/O性能存在问题 ...

  5. MySQL,Oracle,PostgreSQL,mongoDB,Hive, SAP HANA 数据库web维护客户端管理工具

    TreeDMS数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL,mongoDB ,Hive, SA ...

  6. 基于java平台的常用资源整理

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  7. 这里整理了基于java平台的常用资源

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  8. SAP和Java系统的Webservice实例

    简介: 关于Webservice的概念和原理,简单来讲,Webservice是一种基于SOAP传输协议,用WSDL描述,用XML封装数据的接口技术.由于其跨平台.跨防火墙.开发成本低.开发周期短等优势 ...

  9. .net项目架构改造之搭建基于java环境配置一览【上】

    最近公司做了一个项目,需要嵌套在千牛的客户端上,项目代码必须上阿里的聚石塔,全程采用基于docker的自动化部署,我们的项目是基于.net架构.很遗憾 的是基于windows的docker上部署在访问 ...

随机推荐

  1. SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card【学习笔记】

    SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card 打印了如下的log: - ::>[ after ms - :: ...

  2. 关于Linux中nohup.out日志过大问题

    背景,java项目,一般在运行JAVA程序时需要用到nohup命令来实现后台启动日志,默认保存在当前目露nohup.out文件.但是有些程序输出nohup文件会出现过大的情况. 在此解决如下: 1,在 ...

  3. 通过SOCKS代理渗透整个内网

    https://blog.csdn.net/SouthWind0/article/details/83111044 通过SOCKS代理渗透整个内网 1.背景 经过前期的渗透工作,我们现在已经成功找到了 ...

  4. Laya中地图拼接的缝隙问题

    拼图的空隙. Egret也有拼图的空隙.比如制作飞机游戏,背景拼接轮换着下移,有明显的缝隙.用TextureMerger可以解决. 看了下Laya.可以设置repeat. 编辑模式,图片上右键,设置默 ...

  5. Java8 Collectors类的静态工厂方法

    预定义收集器的功能,就是那些可以从Collectors类提供的工厂方法(例如grouping By)创建的收集器. 它们主要提供了三大功能: •将流元素归约和汇总为一个值 •元素分组 •元素分区 •c ...

  6. 【Tools】Myeclise-2018.12.0 最新破解文件

    Myeclise-2018.12.0 最新破解文件. 最近在写android app登录块,需要用到这个工具,顺手就拿到了,发现资源太少.这里分享给大家. 有币高富帅打赏下载地址: https://d ...

  7. 利用function和bind实现回调功能

    介绍一种利用function和bind来实现回调的功能. C++参考手册中对function的介绍: std::function的实例能存储.复制及调用任何可调用的目标,包括:函数.lambda表达式 ...

  8. SpringBoot+Mybatis+MySql 自动生成代码 自动分页

    一.配置文件 <!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <arti ...

  9. Google深度学习开源框架TenseorFlow安装

    Google近期发布了TensorFlow,考录到Google出品,必属精品,估计这玩意会火,不过火钳刘明已经来不及了 今天才想着安装来试试 TensorFlow官网:https://www.tens ...

  10. Windows中使用 Python 调用 Matlab 程序

    https://ww2.mathworks.cn/help/matlab/matlab_external/system-and-configuration-requirements.html http ...