How can IntelliJ IDEA help us to keep up with Java?
Abstract
The current release cadence of a new version of Java every 6 months can be overwhelming. The releases might even contain preview features which are "complete" but may change with every new release until they finally stabilize. How can a real developer keep up with this? The good news is that your IDE can help. IntelliJ IDEA not only provides support for the latest versions of Java (even the ones that aren't released yet), it can also help us to discover and use the new language features. This way we can let the IDE help us to migrate to the latest and greatest, and we don't need to go researching for the relevant features every 6 months. In this session, Trisha will show the interesting language features in recent versions of Java, and show how IntelliJ IDEA makes these really easy to find and use.
Slides
Resources
Features
Java 15
- Java 15 and IntelliJ IDEA blog and video - covers sealed classes and interfaces, and modifications to records.
- JEP 378: Text Blocks (Standard)
- JEP 371: Hidden Classes
- JEP 375: Pattern Matching for instanceof (Second Preview)
- JEP 384: Records (Second Preview)
- JEP 360: Sealed Types (Preview)
- JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (Production)
- All JDK 15 JEPs
Java 14
- Java 14 and IntelliJ IDEA - (blog post with video) covers Records, Pattern matching for instanceof, and covers the updates to text blocks and switch expressions
- JEP 358: Helpful NullPointerExceptions
- JEP 361: Switch Expressions (Standard)
- JEP 368: Text Blocks (Second Preview)
- JEP 359: Records (Preview)
- JEP 305: Pattern Matching for instanceof (Preview)
- JEP 364: ZGC on macOS (Experimental) and JEP 365: ZGC on Windows (Experimental)
- All JDK 14 JEPs
Java 13
- Java 13 and IntelliJ IDEA - (blog post with video) covers Text Blocks, and mentions the changes to Switch Expressions since Java 12.
- JEP 351: ZGC: Uncommit Unused Memory (Experimental)
- All JDK 13 JEPs
Java 12
- Java 12 and IntelliJ IDEA blog and video - how IntelliJ IDEA can help you with the new switch expression syntax (available in IntelliJ IDEA 2019.1 and later)
- All JDK 12 JEPs - includes several related to Garbage Collection
Java 11
- Java 11 and IntelliJ IDEA
- Introduction to the Java HTTP Client
- Java 11 HTTP/2 API Tutorial
- Reactive HTTP/2 Requests And Responses In Java 11
- Scripting Java 11, Shebang And All
- Eleven Hidden Gems In Java 11 - for me, it's the tiny API changes that make my life as a developer easier
- Java 11 String API Additions
- Java's new Z Garbage Collector (ZGC) is very exciting - "ZGC’s design targets a future where these kinds of capacities are common: multi-terabyte heaps with low (<10ms) pause times and impact on overall application performance (<15% on throughput)."
- Predicate::not
Java 10
- Webinar: IntelliJ IDEA and Java 10 - video and follow up blog post discussing the best places to use
var
- Java 10: Local-variable type inference
- Collecting to immutable collections from a Stream operation
Java 9
- Real World Java 9 - a presentation I was giving in 2017 about Java 9 features
- JEP 261: The Java Platform Module System
- Modules: Quick Start Tutorial
- Convenience Factory Methods for Collections
- jlink Reference Documentation
- Java 9 jlink Explained in 5 Minutes
- Java 9's other new enhancements, Part 2: Milling Project Coin
- Reactive Programming with JDK 9 Flow API
- JEP 238: Multi-Release JAR Files
- Creating Multi-Release JAR Files in IntelliJ IDEA
- JEP 259: Stack-Walking API
- Deep Dive into the Stack-Walking API
- JEP 102: Process API
- JShell User's Guide
- More methods on Optional
- Java 9 and IntelliJ IDEA
Upgrading from Java 8
- Beyond Java 8 - an overview of what's changed in the ecosystem since Java 8
- Reasons to move to Java 11
- Upgrading from Java 8 to Java 12 - tips for upgrading from 8, either to Java 11 or whichever is the latest version
- My video course on Moving to Java 9 is available on Safari or can be purchased via InformIT. This has details about the features from Java 9 that are most interesting to Java developers, and a guide on how to migrate to Java 9. Of course, this is still valid even when migrating to Java 11, although there may be one or two additional gotchas now.
- I wrote something for Oracle's Java Magazine on Migrating from Java 8 to Java 9
- And I wrote a related piece for InfoQ on Painlessly Migrating to Java Jigsaw Modules - a Case Study
- Java SE Oracle JDK 9 Migration Guide - Oracle's guide
- All You Need To Know For Migrating To Java 11 - an in depth guide
- From Java 8 to Java 11 - some pointers
- Migrate Maven Projects to Java 11 - specific help for Maven. Includes some Java 9 Magic Incantations in the POM file that you might need.
- Migrating Spring Boot Applications to Java 11 - a case study
- It’s time! Migrating to Java 11 - a case study
Performance
Improved performance (especially if it's "out of the box", without needing extra work) can be a good business motivator for upgrading.
- Java 11: JEP 331: Low-Overhead Heap Profiling
- How much faster is Java 11? - a case study that benchmarks both G1 GC and Parallel GC
- OpenJDK Startup From 8 Through 11
- Performance After Eight (video)
- Improving G1 out-of-the-box performance
See Also
My Beyond Java 8 talk gives a broader perspective on the changes since Java 8 - licensing, support, features (not just those that IntelliJ IDEA can help with), garbage collectors, and so on.