从Java8到Java17(一)

1,728 阅读4分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

作为一名Java写码员,我时刻都会提醒自己,我只是个打字员,只是去实现产品需求的编码者,只是个没有技术含量在芸芸众生中混饭吃的打工人。我不会写高性能的go,不会写人工智能的python,不会写纯函数的elixir,不会写强者的语言c++,不会写性能极高且最安全的rust。我编辑器之神和神的编辑器都尝试过,都没用明白,我只会用傻瓜式的intelij idea。我就是那个生存在鄙视链最底端的Java程序员。

如果你恰好跟我一样,生存环境如此的恶劣,那我们可以一起来苦中作乐,一起学习交流一下Java的一些新的版本特性。Java在进步,性能在提升,编码更友好,只是版本的普及还需要一点时间。下面是2020年统计的Java各版本的使用情况,Java8还是yyds。我比较意外的是Java11竟然有如此的占比,因为大概2017年的时候我去阿里面试时,面试官说当时他们还在用Java6,要知道Java8是2014年发布的。至少在我现在这样一个某巨头互联网公司,Java的项目普遍都是Java8。

image.png

我是属于那部分喜欢升级的人,手机app中都是最新版,除非新版有bug没法用。相对应的这也是不喜欢升级的人的出发点,新是不稳定的代名词。道理大家都懂,你不升级我不升级,技术还怎么进步(哦对,差点忘了我是没有技术的)。在我眼里,新代表着进步,但进步可能会牺牲一点稳定性,投资有风险是必然的。

不得不承认Java8是一个划时代的版本,从另一方面说8之前的版本确实也太差了。竞争就是这样,不进步就被淘汰,从8之后,Java的更新也进入了一个快车道,每半年就会发布一次数字更新,但很多都是临时版本,长期维护的版本则由Java自行宣布,当前8,11,17属于是LTS(长期维护版本),下面的表格来自oracle官方的支持时间表:

ReleaseGA DatePremier Support UntilExtended Support UntilSustaining Support
7 (LTS)July 2011July 2019July 2022Indefinite
8 (LTS)March 2014March 2022December 2030Indefinite
9 (non‑LTS)September 2017March 2018Not AvailableIndefinite
10 (non‑LTS)March 2018September 2018Not AvailableIndefinite
11 (LTS)September 2018September 2023September 2026Indefinite
12 (non‑LTS)March 2019September 2019Not AvailableIndefinite
13 (non‑LTS)September 2019March 2020Not AvailableIndefinite
14 (non‑LTS)March 2020September 2020Not AvailableIndefinite
15 (non‑LTS)September 2020March 2021Not AvailableIndefinite
16 (non-LTS)March 2021September 2021Not AvailableIndefinite
17 (LTS)September 2021September 2026September 2029Indefinite
18 (non-LTS)March 2022September 2022Not AvailableIndefinite
19 (non-LTS)September 2022March 2023Not AvailableIndefinite
20 (non-LTS)March 2023September 2023Not AvailableIndefinite
21 (LTS)September 2023**September 2028 **September 2031Indefinite

从这个表中我们可以得出一些有用的信息(付费的企业用户除外)

  1. Java8明年将停止维护
  2. 11并不是一个安全和稳妥的升级目标
  3. 下个LTS要到2023年,我们有足够的时间来磨合17
  4. 现在要升级就升级到17吧

现在这个时间点,多数公司都用上了docker,升级jdk的版本将不再麻烦,旧的项目可能有历史负担,新的项目完全可以用Java17了。我刚开始工作时还经历过物理机混合部署的情况,这就完全杜绝了升级换代的可能。