Hello everyone, I’m Xiaobian.
It is said that Java 8 is YYDS, so did you notice that Java 17 is also a long-term support version? JDK 19 is currently scheduled to be released in September this year
SpringBoot officially supports Java 17, and Kafka 3.0 deprecates Java 8
Spring Boot 2.5.5 is the first version of Spring Boot to support Java 17. Now you can initialize Spring Boot to support java17 version from Spring Initializr.
The 14 new features of Java 17 are:
306: Restore always strict floating point semantics
356: Enhanced Pseudo-Random Number Generator
382: New macOS rendering pipeline
391: macOS/AArch64 port
398: Deprecating the Applet API that will be removed soon
403: Strongly encapsulate the internal API of JDK
406: Switch Pattern Matching (Preview)
407: Delete RMI activation
409: Sealed class
410: Remove experimental AOT and JIT compilers
411: Deprecation is about to remove security manager
412: External Functions and Memory API (Incubator)
414: Vector API (second feature incubation)
415: Context-specific deserialization filters
Of these 14 functions, which one is most useful to you.
First LTS release after 3 years
According to the Oracle Java SE Support Roadmap, Java 17 is the first long-term support release since Java 11. Oracle also proposes to change the cadence of JDK LTS releases from every three years to every two years, with each LTS release being serviced for at least 8+ years. The Java version is usually updated every 6 months, in March and September respectively, and the support time of these versions is basically about half a year.
The life cycle of various versions of Java
According to the official blog of Oralce, although the number of users of the 6-month version is increasing, most organizations and enterprises prefer to use the LTS version in the production environment to obtain more stable and reliable services. This is also corroborated by the 2021 Java Community Report released by Snyk, although 61.5% use Java 11 in production, half of Java 11 users (currently the most used version) are in their production stack Use Java 8.
In addition to the 14 major updates and faster LTS service cadence mentioned above, what are the highlights of Java 17?
Oracle Introduces Free Java License
Since Java was acquired by Oracle, paid JDK has been criticized, and now, Oracle announced the launch of JDK free service. What does that mean? Let’s take a look at the official explanation:
Oracle is providing the industry with a free, leading Oralce JDK that includes all quarterly security updates and includes commercial and production use .
The new license is the Oracle Free Terms and Conditions (NFTC) license. This Oracle JDK license is free for all users, even for commercial and production use. Redistribution is permitted as long as there is no charge .
Developers and organizations can now easily download, use, share and redistribute the Oracle JDK without a click.
Oracle will provide these free releases and updates starting with Oracle JDK 17 and continuing for a full year after the next LTS release. Previous versions are not affected by this change.
Oracle will continue to provide Oracle OpenJDK releases under the GPL on the same release and schedule as they have been since Java 9.
To sum it up in one sentence, “free” doesn’t mean developers can do whatever they want, because Oracle’s NFTC prohibits paying for redistribution of its Java software.
Before the official release of Java 17, the Java development framework Spring took the lead in announcing on the official blog that Spring Framework 6 and Spring Boot 3 plan to achieve a high-end baseline for overall availability in the fourth quarter of 2022:
Java 17+ (from Java 8-17 in the Spring Framework 5.3.x line)
Jakarta EE 9+ (Java EE 7-8 from the Spring framework 5.3.x line)
Support Java 17 by taking action, indirectly calling on developers, it’s time to use Java 17.
Should you upgrade? How fast is Java 17?
Seeing such a sincere update, should developers upgrade? Although you can experience Java 17 just by switching JDK. In response, the OptaPlanner website did a benchmark: How fast is Java? Let me tell you the answer by comparing JDK 17, JDK 16 and JDK 11.
Hardware: A stable machine not running any other computationally demanding processes, configuration: Intel® Xeon® Silver 4116 @ 2.1 GHz (12 cores total / 24 threads) and 128 GiBRAM memory, running RHEL 8 x86_64.
openjdk 11.0.12 2021-07-20OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7)OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode)
openjdk 16.0.2 2021-07-20OpenJDK Runtime Environment (build 16.0.2+7-67)OpenJDK 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)
openjdk 17 2021-09-14OpenJDK Runtime Environment (build 17+35-2724)OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)
-Xmx3840Mand specify the garbage collector explicitly:
-XX:+UseG1GCFor G1GC, the low-latency garbage collector (default in all three JDKs).
-XX:+UseParallelGCFor ParallelGC, high throughput garbage collector.
org.optaplanner.examples.app.GeneralOptaPlannerBenchmarkAppfrom module 8.10.0.Final in
Each run used OptaPlanner to solve 11 planning problems, such as employee scheduling, school timetables, and cloud optimization. Each planning problem runs for 5 minutes. Logging is set to
INFO. Benchmarks begin with a 30-second
JVMwarm up, followed by discards.
Solving the planning problem doesn’t involve
IO(other than the few milliseconds of loading the input during startup). A single
CPUis completely saturated. It keeps creating many short lived objects which are then collected by the
The benchmark measures the number of scores calculated per second, the higher the better. Calculating a score for a solution planned by a test plan is not an easy task: it involves many calculations, including checking for conflicts between each entity and every other entity.
Number of runs: 3 runs in sequence for each
JDKand each garbage collector combination. The results below are the average of these 3 runs.
Java 11 (LTS) and Java 16 and Java 17 (LTS)
Table 1. Computation per second score using G1GC on different JDKs
Table 2. Computation per second score using ParallelGC on different JDKs
Looking at the raw data for 3 separate runs (not shown here), the number of machine reallocations (B1 and B10) fluctuates wildly between runs on the same JDK and GC, typically more than 10%, other numbers are not affected by this The effect of unreliability.
It’s arguably better to ignore Machine Reassignment numbers. But to avoid problems with picking data, these results and averages do include them.
G1GC vs ParallelGC on Java 17
Table 3. Computation scores per second for different GCs under JDK 17
On average, benchmark results using OptaPlanner as an example show:
For G1GC (default), Java 17 is 8.66% faster than Java 11 and 2.41% faster than Java 16.
For ParallelGC, Java 17 is 6.54% faster than Java 11 and 0.37% faster than Java 16.
Parallel GC is 16.39% faster than G1 GC.
The results are not too surprising: the latest JDK is faster, and the high-throughput garbage collector is faster than the low-latency garbage collector.
In JDK 15 based benchmarks, Java 15 is 11.24% faster than Java 11. Now, Java 17 has less gain over Java 11. Does this mean that Java 17 is slower than Java 15?
The answer is no, Java 17 is still faster than Java 15 because those previous benchmarks were run on a different codebase (OptaPlanner 7.44 instead of 8.10). Don’t compare oranges to apples, they are not comparable.
All in all, the performance of JDK17 is still very worth upgrading, at least in terms of OptaPlanner Demo.
Also, the fastest garbage collector for these use cases is still ParallelGC, not G1GC (default).
What surprises does Java 17 bring to you as the first LTS release after 3 years? In the face of the strong development of JVMs such as Go and Kotlion, do you think Java can still maintain its dominance?
The text and pictures in this article are from the architect’s column
This article is reprinted from https://www.techug.com/post/java-17-new-features-fast-to-take-off-stunned/
This site is for inclusion only, and the copyright belongs to the original author.