JDK 15 都发布了,可 Java 8 依然是最爱
Java 都已经 25岁了,想必比在座的很多同学年龄还大吧。
在 JDK 版本的世界里,从来都是 Oracle 发他的新版本,我们继续用我们的老版本。4 年之前用 JDK 7,后来终于升级到了 JDK 8。自从升级了没多久,JDK 就开始了半年发一个新版本的节奏,陆续发布了 9 、10、11、12、13,别着急,还有 14,直到前几天(2020年5月28日) 日,连 JDK 15 的抢先试验版都出来了,不禁要说,Java 你真行。
2020年2月,由 Snyk 和 The Java Magazine 联合推出发布的 2020 JVM 生态调查报告 显示有 34% 的用户使用 Oracle JDK,57% 的用户使用 OpenJDK。其中 Java 8 的使用者依然维持在 64% 过半数的水平。
要知道 2018年,有 70% 的用户使用 Oracle JDK,21% 的用户使用 OpenJDK。其中 Java 8 的使用者占到了 79%。
这都两年过去了,可见 Oracle 的收费政策吓走了不少开发者,转而投向 OpenJDK 的怀抱。而 Java 8 的使用者减少了 15 % ,也不算很多,这 15% 应该是开始使用 JDK 9 或 JDK 11 去了。但 Java 8 依然过半啊,所以说,现在用 Java 8 也不用慌,毕竟大多数人和我一样也都还在用 Java 8,真香。
都已经 JDK 15 了,为什么还有这么多公司使用旧版本。
不瞒各位说,用 Java 8 已经算是非常优秀,非常有上进心的了,有的公司还在使用 7,更有甚者还在用 6,你说是不是很 6。不是道听途说,我认识的人里面就有用 JDK 1.6 的,感觉不是在同一个世界。
之所以会出现这种状况,是因为升级版本耗时费力,最重要的是有可能影响服务的稳定性,虽然说 Java 是向后兼容的,但是谁知道是不是有坑在里面。在没有重大安全漏洞或重大性能提升的情况下,大多数公司还是以稳定性为主,既然 Java 8 已经能满足业务需求了,那就用它好了。
现在又增加了原因,就是从去年 1 月份开始对 Oracle JDK 的商业用途收费了,用着 Oracle JDK 的厂子更有理由不升级了,为了节约成本啊,对不对。
收费是近两年对 Oracle JDK 的一大改变,还有一个就是发版方式的改变。
收费
从去年1月份开始,Oracle JDK 开始对 Java SE 8 之后的版本开始进行商用收费,确切的说是 8u201/202 之后的版本。如果你用 Java 开发的功能如果是用作商业用途的,如果还不想花钱购买的话,能免费使用的最新版本是 8u201/202。当然如果是个人客户端或者个人开发者可以免费试用 Oracle JDK 所有的版本。
发版方式
在 JDK 9 发布之前,Oracle 的发版策略是以特性驱动的,只有重大的特性改变才会发布大版本,比如 JDK 7 到 JDK 8,中间会发多个更新版本。而从 JDK 9 开始变为以时间驱动的方式。发布周期为6个月一个大版本,比如 JDK 9 到 JDK 10,3个月一次补丁版,3年一个 LTS(长期支持版本)。
发版时间稳定了,使用者就可以相应的根据发版节奏调整所使用的 Java 版本了。但是付费使用好像又增加了成本,一直免费使用的东西,突然收费了,好像有点接受不了,尤其对于小公司而言。
上面所说的都是 Oracle JDK 。那么如果既想要更新版本又不想花钱怎么办呢,当然也是有办法的。可以选择 Open JDK。
Open JDK 是完全开源免费的,由 Oracle 以及 Redhat 等开源组织维护。Oracle JDK 只是一个 Open JDK 的发行版。他们两个的关系就好像是原生安卓系统和各个手机厂商定制的操作系统的关系。Oracle JDK 就对应原生安卓系统,比如小米的 MI UI 就对应 Oracle JDK。另外,除了 Oracle JDK,还有其他的 Open JDK 的发行版,比如 AWS 的 Amazon Corretto,阿里巴巴的 Alibaba Dragonwell 等等。
红帽将接替 Oracle 维护 JDK 的长期支持版,比如 OpenJDK 8 和 OpenJDK 11,并且它和 Oracle JDK 的差别已经非常小了,可以放心使用。
然而,对于新版本的新特性,我也只是看一看,学一学,然后专心的用 Java 8 开发。
这就像是一个谜
有些现象就更有意思了,虽说很多公司都已经在用 JDK 8了,但是呢,很多同学还是把它当做 JDK 1.7 来用,为什么这么说呢,JDK 8 的新特性,对不起,一个不用。
JDK 8 的新特性有如下几个:
Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
Date Time API − 加强对日期与时间的处理。
Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
就说 Stream API 吧,这么好用的 API,对集合的过滤、筛选、类型转换简直是友好方便到不行,结果呢,还是很多同学压根儿就没用过。
另外,日期的处理,比如 LocalDate、LocalTime 等,也都比之前的 API 好用很多,可是呢,还是很多同学不用,宁愿用着之前已经用 @Deprecated 注解为过期的方法。
最后,祝愿
不知道我还要用 Java 多久,也许两年,也许五年,也许十年,也许是一辈子吧。祝愿 Java 常在常新,帮你涨薪水。
来源:InfoQ