赞
踩
星河流转,日月更替,在2023这年里,Java也迎来了它的第28个年头。在这一年里,Java生态系统发生了许多让人瞩目的变化,包括Java语言本身的更新、亦或是主流框架的迭代,以及开发者社区的活跃程度。那么本文让我们一起盘点2023年Java都做了哪些改变。
如图,数据来源于Tiobe index。首先,我们可以先看看各大程序语言在全球的使用情况,我们的Java同比去年,使用人数下滑了3.83%,但这影响不了我们Java社区及生态稳定发展的势头。
Dec 2023 | Dec 2022 | Change | Programming Language | Ratings | Change | |
---|---|---|---|---|---|---|
1 | 1 | Python | 13.86% | -2.80% | ||
2 | 2 | C | 11.44% | -5.12% | ||
3 | 3 | C++ | 10.01% | -1.92% | ||
4 | 4 | Java | 7.99% | -3.83% | ||
5 | 5 | C# | 7.30% | +2.38% | ||
6 | 7 | JavaScript | 2.90% | -0.30% | ||
7 | 10 | PHP | 2.01% | +0.39% | ||
8 | 6 | Visual Basic | 1.82% | -2.12% | ||
9 | 8 | SQL | 1.61% | -0.61% | ||
10 | 9 | Assembly language | 1.11% | -0.76% | ||
11 | 21 | Scratch | 1.08% | +0.41% | ||
12 | 26 | Fortran | 1.07% | +0.64% | ||
13 | 12 | Go | 1.03% | -0.12% | ||
14 | 14 | MATLAB | 0.93% | -0.02% | ||
15 | 23 | Kotlin | 0.92% | +0.34% | ||
16 | 16 | Delphi/Object Pascal | 0.92% | +0.07% | ||
17 | 15 | Swift | 0.82% | -0.09% | ||
18 | 20 | Rust | 0.80% | +0.12% | ||
19 | 17 | Ruby | 0.77% | -0.04% | ||
20 | 11 | R | 0.72% | -0.53% |
再来看看我们的JDK各个版本使用,可以看到2023年了,如图数据,来源于jetbrains公司公布的数据。可以看到我们的JDK 8依然抗打,然后排在第二的就是我们的JDK 17了。
ps:笔者现在的公司很多项目都逐渐升级到JDK 17了,不得不说在GC方面确实给力了很多,之前一些老项目,经常出现full gc,想改代码又实在改不动,升上17后,明显好转了。
首先我们把目光看向Spring。可以看到Spring Framework 6 和 Spring Boot 3对JDK版本的最低要求是JDK 17,这也间接导致很多团队和开发者将被迫从Java 11升级到17,或者像笔者的公司,从Java 8直接升级到Java 17版本。
另一方面,我们这里也要说说我们的JDK 21。该版本在2023 年 9 月 19 日正式亮相,作为一个**LTS版本,**它给我们带来了哪些惊喜呢?别急,待会我们接着看,这里我们可以看到像Tomcat 11 紧跟步伐,把JDK最低要求也提到了JDK 21,不过目前还是一个alpha版本(内部测试版)。
2023 年 9 月 19 日,JDK 21正式亮相,并且作为一个LTS版本。那么它带来了哪些新特征呢?参考Oracle官网的描述,带来的改变很多,有新加的特征,有废弃的方式,如下笔者列举部分有趣的变化进行描述。
// 启用分代ZGC
java -XX:+UseZGC -XX:+ZGenerational ...
// 申明几个记录类
record Point(int x, int y) {}
enum Color { RED, GREEN, BLUE }
record ColoredPoint(Point p, Color c) {}
record Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight) {}
我们可以使用记录模式提取对象的组成部分。如果我们想从左上角提取颜色,我们可以这样写:
static void printUpperLeftColoredPoint(Rectangle r) {
if (r instanceof Rectangle(ColoredPoint ul, ColoredPoint lr)) {
// 打印颜色属性值
System.out.println(ul.c());
}
}
该ColoredPoint也是一个记录类,可以进一步分解它:
static void printColorOfUpperLeftPoint(Rectangle r) {
if (r instanceof Rectangle(ColoredPoint(Point p, Color c),
ColoredPoint lr)) {
System.out.println(c);
}
}
除了官方项目之外,我们把目光转移到一些很重要的 OpenJDK 项目上,看看2023年都有哪些特性:
https://www.oracle.com/java/technologies/javase/21-relnote-issues.html
https://openjdk.org/jeps/444
https://openjdk.org/jeps/441
https://openjdk.org/jeps/440
https://openjdk.org/jeps/431
https://www.tiobe.com/tiobe-index/
https://www.jetbrains.com/lp/devecosystem-2023/java/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。