Key New Features of Java 11 and Practical Migration Guide
This guide explains why Java 11 is worth adopting, lists its major language and API enhancements over Java 8—including var type inference, improved collections, stream and HTTP client APIs—and provides detailed solutions for common migration issues such as missing JAXB modules and container‑aware JVM behavior.
Why choose Java 11? It offers container support, improved garbage collection, a 16% performance boost, a slimmer distribution, and long‑term support.
New language features compared with Java 8 include:
Variable type inference using var (similar to Python).
Enhanced for‑loop usage with var .
Combination of var with generics (cannot be used for class fields or method return types).
Additional APIs such as the new HTTP Client, string utilities, collection factories ( of() @since 9, copyOf() @since 10), and stream enhancements ( takeWhile , dropWhile , iterate , ofNullable ).
The built‑in HTTP Client API supports synchronous and asynchronous HTTP requests.
Running Java applications in Docker containers is now safe because the JVM can detect cgroup memory and CPU limits (added in Java 10), allowing the application to respect container‑imposed constraints.
Common migration problems and solutions:
Missing javax.xml.bind (JAXB) modules – add the appropriate Maven dependencies:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>Compilation errors caused by removed sun.misc classes – replace them with the standard java.util.Base64 encoder/decoder:
使用 java.util.Base64.Encoder java.util.Base64.Decoder 替换Service startup failures (e.g., Eureka with embedded Tomcat) – include JAXB runtime dependencies:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>For Java 9 and later, the modular system removes automatic loading of JAXB; the same dependencies (including javax.activation:activation:1.1.1 ) must be declared explicitly.
360 Tech Engineering
Official tech channel of 360, building the most professional technology aggregation platform for the brand.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.