I want to know about the features between the versions. There is no latest feature description in search, so I want to write one. Without further ado.
PS: absolutely the most complete network is the most complete, if not, please private chat I add, ha ha ha!
JDK Version 1.0
1996-01-23 Oak(Oak tree)
The original version, a great milestone, but pure explanation run, using the plug-in JIT, performance is poor, run slowly.
JDK Version 1.1
1997-02-19
- JDBC(Java DataBase Connectivity);
- Support for inner classes;
- RMI(Remote Method Invocation) ;
- Reflection;
- Java Bean;
JDK Version 1.2
1998-12-08 Playground
- Set frame;
- JIT(Just In Time) compiler;
- Digitally sign the packaged Java files;
- JFC(Java Foundation Classes), including Swing 1.0, drag and drop, and Java2D class libraries;
- Java plug-in;
- Rollable result sets, BLOBs, CLOBs, batch updates and user-defined types are introduced in JDBC.
- Add sound support to Applet.
JDK Version 1.3
2000-05-08 Kestrel(Kestrel)
- Java Sound API;
- Jar file index;
- Lots of optimizations and enhancements to all aspects of Java;
JDK Version 1.4
The 2002-02-13 Merlin (falcon)
- XML processing;
- Java Printing service;
- Logging API;
- Java Web Start;
- The JDBC 3.0 API.
- Assertion;
- Preferences API;
- Chain-type exception handling;
- Support IPV6;
- Support for regular expressions;
- Introduce the Imgae I/O API.
JAVA 5
2004-09-30 Tiger(Tiger)
- Generics;
- Enhance loops, which can be used iteratively;
- Automatic packing and unpacking;
- Type-safe enumeration;
- Variable parameter;
- Static introduction;
- Metadata (annotations);
- Instrumentation;
JAVA 6
2006-12-11 Mustang
- Scripting language support;
- The JDBC 4.0 API.
- Java Compiler API;
- Pluggable annotations;
- Added additional information to Native PKI(Public Key Infrastructure), Generic Security Service (Java GSS),Kerberos, and Lightweight Directory Access Protocol (LDAP) support.
- Inheritance Web Services;
JAVA 7
2011-07-28 Dolphin(Dolphin)
- The switch block allows a string as a branching condition;
- Apply type inference when creating generic objects;
- Catching multiple exceptions in a block of statements
- Support for dynamic languages;
- Support for try-with-resources(catching multiple exceptions in a block of statements);
- Introduced the Java NIO.2 development kit.
- Numeric types can be represented as binary strings, and underscores can be added to the string representation;
- Diamond syntax (apply type inference when creating generic objects)
- Null is worth automatic processing;
JAVA 8
2014-03-18
- Lambda expressions − Lambda allows functions to be passed as arguments to a method.
- Method references − Method references provide a very useful syntax for directly referencing methods or constructors of existing Java classes or objects (instances). In conjunction with lambda, method references can make the construction of a language more compact and concise, reducing redundant code.
- Default method − A default method is a method that has an implementation in the interface.
- New tools – New compilation tools such as Nashorn engine JJS, class dependency analyzer JDEps.
- Stream API − The newly added Stream API (java.util.stream) brings a true functional programming style to Java.
- Date Time API − Enhances Date and Time processing.
- − The Optional class has become part of the Java 8 class library and is used to resolve null pointer exceptions.
- Nashorn, JavaScript Engine − Java 8 provides a new Nashorn JavaScript engine which allows us to run specific JavaScript applications on the JVM.
- Detailed reference: www.runoob.com/java/java8-…
JAVA 9
2017-09-22
- Module system: A module is a container for packages. One of the biggest changes in Java 9 was the introduction of the module system (Project Jigsaw).
- REPL (JShell) : Interactive programming environment.
- HTTP2 Client: The HTTP/2 standard is the latest version of the HTTP protocol, and the new HTTPClient API supports WebSocket and HTTP2 streams as well as server push features.
- Improved Javadoc: Javadoc now supports searching in THE API documentation. In addition, Javadoc output is now compatible with the HTML5 standard.
- Multiversion-compatible JAR packages: The multiversion-compatible JAR feature allows you to create a class version that you choose to use when running the library in a specific version of the Java environment.
- Collection factory methods: In the List, Set, and Map interfaces, new static factory methods create immutable instances of these collections.
- Private interface methods: Use private private methods on the interface. We can write private methods in an interface using the private access modifier.
- Process API: Improved API to control and manage operating system processes. The introduction of java.lang.ProcessHandle and its nested interface Info lets developers escape the dilemma of having to use native code to get the PID of a local process.
- Improved Stream API: The improved Stream API adds convenience methods to make Stream processing easier and to write complex queries using the collector.
- Improve the try – with – resources: If you already have a resource that is final or equivalent to a final variable, you can use it ina try-with-resources statement without declaring a new variable ina try-with-resources statement.
- Improved Deprecated annotation @Deprecated: The @deprecated annotation can flag the state of a Java API. It can indicate that the Deprecated API will be removed or is broken.
- Improved Diamond Operator: Anonymous classes can use the Diamond Operator.
- Improvements to the Optional class: java.util.Optional has added a number of useful new methods.Optional can be converted directly to stream.
- Multi-resolution image API: Define multi-resolution image API, developers can easily operate and display different resolution images.
- Improved CompletableFuture API: The asynchronous mechanism of the CompletableFuture class can perform operations when the processhandle. onExit method exits.
- Lightweight JSON API: A lightweight JSON API is built in
- Reactive Streams API: A new Reactive Streams API was introduced in Java 9 to support responsive programming in Java 9.
- Detailed reference: www.runoob.com/java/java9-…
JAVA 10
2018-03-20
According to the public information on the website, there are 12 important features, as follows:
- JEP286, var local variable type inference.
- JEP296 combines many of the JDK repository code that was previously managed using Mercurial into one repository, simplifying development and administration.
- JEP304, unified garbage collection interface.
- Parallel full garbage collection for JEP307, G1 garbage collector, parallelism to improve worst case latency.
- JEP310, Application class data (AppCDS) sharing, reduces memory footprint by sharing common class metadata across processes, and reduces startup time.
- JEP312, ThreadLocal handshake interaction. A callback is performed on the thread without going to the global JVM Safepoint. Optimizations can stop a single thread rather than all or none of them.
- JEP313, remove the Javah tools shipped with JDK. You can use javac -h instead.
- JEP314, using additional Unicode language markup extensions.
- JEP317, which allocates the heap memory footprint to user-specified alternate memory devices, uses Graal’s Java-based compiler to improve performance by precompiling Java code to local code.
- JEP318, which provides a default set of root CA certificates in OpenJDK. Open source the root certificate for Java SE currently provided by Oracle to make OpenJDK easier for developers to use.
- JEP322, release version based on time definition, i.e., the release cycle mentioned above. $INTERIM.$UPDATE.$PATCH, which is the major, intermediate, upgrade package and PATCH version.
JAVA 11
2018-09-25
New features after translation are:
- 181: Nest-based access control
- 309: Dynamic class file constants
- 315: Improve Aarch64 intrinsics
- 318: no operation garbage collector
- 320: Eliminate Java EE and CORBA modules
- 321:HTTP client (standard)
- 323: syntax λ parameter for local variables
- 324:Curve25519 and Curve448 key protocol
- 327:Unicode 10
- 328: Flight recorder
- 329:ChaCha20 and Poly1305 encryption algorithms
- 330: Launch a column source code program
- 331: low overhead heap analysis
- 332: Transport Layer Security (TLS)1.3
- 333: Action: A scalable low-latency Garbage collector (experimental)
- 335: Against Nashorn JavaScript engine
- 336: Oppose Pack200 tools and apis
JAVA 12
2019-03-19
As a “functional release,” JDK 12 contains a total of eight new Jeps, which are:
- 189: Shenandoah: A low-pause-time Garbage Collector (Experimental) : A new garbage collector called Shenandoah is added to reduce pause times by working on evacuation while Java threads are running.
- 230: Microbenchmark Suite: Adds a Suite of microbenchmarks that enable developers to easily test JDK performance and create new benchmarks based on the existing Java Microbenchmark Harness (JMH).
- 325: Switch Expressions (Preview) : Extends the Switch statement so that it can be used as a statement or expression, simplifying everyday code.
- 334: JVM Constants API: Introduces an API to model key class-files and nominal descriptions of runtime artifacts, especially those Constants that can be loaded from the constant pool.
- 340: One AArch64 Port, Not Two: delete all source code related to arm64 Port, keep 32-bit ARM Port and 64-bit AArch64 Port.
- 341: Default CDS Archives: Default CDS Archives.
- 344: Abortable Mixed Collections for G1: Abortable garbage collection can be aborted when the collection of the G1 garbage collector exceeds the pause target.
- 346: Resemble Return Unused Committed Memory from G1: Improve the G1 garbage collector to automatically Return Java heap Memory to the operating system when it is idle.
The original address: openjdk.java.net/projects/jd…
We know that JDK 11 is an LTS (Long Term Support) version, so what to do? (JDK 8 is still mainstream anyway, am I really confused?)
Should I use 12 or 11:blog.csdn.net/csdnnews/ar…
JAVA 13
2019-09-17
New features:
- 350 Dynamic CDS Archives extends appCDS to dynamically archive classes at the end of Java application execution. The archive classes include all loaded application classes and libraries that do not exist in the default base layer CDS(Class Data-sharing) archive. The usability of AppCDS is improved through this porcelain imitation.
- 351 ZGC: Uncommit Unused Memory to enhance ZGC, in previous versions, Java after GC would not released to OS, system Memory because every release means to adjust the size of the JVM Memory, there is a certain consumption; With the development of software, we find that memory is an expensive resource in many cases, so it is necessary to release unused memory back to the OS; This feature is started by default, but can be disabled with the -xx:-zuncommit parameter. Note: This feature is implicitly disabled if the latest memory parameter setting is larger than the maximum memory parameter.
- 353 Reimplement the Legacy Socket API In this release, the new implementation will be used to replace the underlying implementation of the Java.net.socket and Java.net.ServerSocket apis. A new version of the old API is not removed, can be configured system properties “jdk.net.useplansocketimpl” to use them. But the default implementation is the latest version.
- 354 Switch Expressions (Preview) Extends the Switch so that it can be used as a statement or an expression, and both forms can be used in the traditional case… : label (with penetrating line) or new case… -> tag (which didn’t fall in), and a new statement for generating values from switch expressions. These changes will simplify everyday coding and prepare for the use of pattern matching in the switch. This is a preview language feature in JDK 13.
- 355 Text Blocks (Preview) Adds Text Blocks to the Java language. A text block is a multi-line string text that avoids the need for most escape sequences, automatically formats the string in a predictable manner, and lets the developer control the format when needed. This is a preview language feature in JDK 13.
In addition, the expiration date of JDK8 is January 2019, after which Oracle will no longer provide patches and other updates. According to the official website, it may be longer. The deadline for JDK9 is March 2018, and the deadline for JDK10 is September 2018. (detailed please go to: www.oracle.com/technetwork.) , JDK 9 and 10 are both short-term versions, so the stable long-term version may be JAVA 11(LTS-long Term Support).
JAVA 14
2020-03-17
- 305 Pattern Matching for Instanceof (Preview)
- 343 Packaging Tool (Incubator)
- 345 NUMA-Aware Memory Allocation for G1
- 349 JFR Event Streaming
- 352 Non-volatile Mapped Byte Buffers Non-atomic Byte Buffers
- 358 Helpful NullPointerExceptions Very Helpful NullPointerExceptions
- 359 Records (Preview) Records (Preview)
- 361 Switch Expressions (Standard)
- 362 Deprecate the Solaris and SPARC Ports Deprecate Solaris and SPARC Ports
- 363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector Remove the Concurrent Mark Sweep (CMS) Garbage Collector
- 364 ZGC on macOS ZGC on macOS
- 365 ZGC on Windows ZGC on Windows
- Avenge the ParallelScavenge + SerialOld GC Combination Deprecate the ParallelScavenge + SerialOld GC Combination
- 367 Remove the Pack200 Tools and API Remove the Pack200 Tools and API
- 368 Text Blocks (Second Preview)
- 370 Foreign-Memory Access API (Incubator)
JAVA 15
2020-09-15
- 339 Edwards-Curve Digital Signature Algorithm (EdDSA) Montgomery and Edwards-Curve Signature Algorithm
- 360 Sealed Classes (Preview)
- 371 Hidden Classes
- 372 Remove the Nashorn JavaScript Engine
- 373 Reimplement the Legacy DatagramSocket API
- 374 Disable and Deprecate Biased Locking Disable and Deprecate Biased Locking
- 375 Pattern Matching for Instanceof (Second Preview)
- 377 Scalable Low-latency Garbage Collector ZGC: A Scalable low-latency Garbage Collector
- 378 Text Blocks
- 379 Shenandoah: A low-pause-time Garbage Collector Shenandoah: A low-pause-time Garbage Collector
- 381 Remove the Solaris and SPARC Ports Remove the Solaris and SPARC Ports
- 383 Foreign-Memory Access API(Second Incubator)
- 384 Records (Second Preview)
- 385 Deprecate RMI Activation for Removal You are advised to remove RMI Activation
JAVA 16
2021-03-16
He’s coming he’s coming, this month !!!! Released!!
- 338 Vector API(Incubator)
- 347 Enable C++14 Language Features
- Migrate from Mercurial to Git
- Migrate to GitHub
- 376 ZGC: Concurrent thread-stack Processing ZGC: Concurrent thread-stack Processing
- 380 Unix-domain Socket Channels Unix-domain Socket Channels
- 386 Alpine Linux Port Alpine Linux Port
- 387 Elastic Metaspace
- 388 Windows/AArch64 Port Windows/AArch64 Port
- 389 Foreign Linker API(Incubator)
- 390 Warnings for value-based Classes Specifies Warnings for value-based Classes
- 392 Packaging Tool Packaging Tool
- 393 Foreign-Memory Access API(Third Incubator)
- 394 Pattern Matching for instanceof
- 395 Records record
- 396 Strongly Encapsulate JDK Internals by Default Strong encapsulation within the JDK by Default
- 397 Sealed Classes (Second Preview)
JAVA 17
2021-09-14
- 306 Restore Always-Strict Floating-Point Semantics
- 356 Enhanced pseudo-random Number Generators
- 382 New macOS Rendering Pipeline
- 391 macOS/AArch64 Port Porting JDK to macOS/AArch64
- 398 Removal of the Applet API for Removal
- 403 Strongly Encapsulate JDK Internals
- 406 Pattern Matching for Switch (Preview)
- 407 Remove RMI Activation Deletes RMI Activation
- 409 Sealed Classes
- 410 Remove the Experimental AOT and JIT Compiler
- 411 Deprecate the Security Manager for Removal
- 412 Foreign Function & Memory API (Incubator)
- 414 Vector API (Second Incubator)
- 415 Context-specific Deserialization Filters
Java 17 is currently in Rampdown Phase One, and all features have been frozen. This means that new features for Java 17 have been decided, and no new JEP (JDK enhancement Suggestions) will be added!
With two months to go, let’s welcome JAVA 17 in one installment. (Inner OS: can’t learn !!!!)