—
Trisha Gee (@trisha_gee)
Developer & Technical Advocate, JetBrains
Real World
Java 9
Real World Java 9
• Jigsaw in Action
• Reactive Programming in Java 9
• The Other Good Stuff
Why Java 9?
Free Lunch!
• Better Use of Memory
• Better Performance of:
• Locking
• Secure Apps
• Graphics
• Better Use of Hardware
• Better Documentation
• Prettier Graphics (Windows and Linux)
• Faster Compilation
Jigsaw
REPL
And… other things?
274: Enhanced Method Handles
275: Modular Java Application Packaging
276: Dynamic Linking of Language-Defined Object Models
277: Enhanced Deprecation
278: Additional Tests for Humongous Objects in G1
279: Improve Test-Failure Troubleshooting
280: Indify String Concatenation
281: HotSpot C++ Unit-Test Framework
282: jlink: The Java Linker
283: Enable GTK 3 on Linux
284: New HotSpot Build System
285: Spin-Wait Hints
287: SHA-3 Hash Algorithms
288: Disable SHA-1 Certificates
289: Deprecate the Applet API
290: Filter Incoming Serialization Data
292: Implement Selected ECMAScript 6 Features in Nashorn
294: Linux/s390x Port
295: Ahead-of-Time Compilation
297: Unified arm32/arm64 Port
298: Remove Demos and Samples
Caveats & Disclaimers
Java 9 in Production?
Everything is EA
Best Practice?
The Case Study
Twitter Dashboard
http://bit.ly/Java8InAnger
Compiling with Java 9
Jigsaw
module-info.java
Pain
• Gradle not working
• Reorganising the file structure is
non-trivial
• This project has no command-line
build
• IDE support is not what we’re used to
• RTFM. No, really do.
Reactive API
Reactive Streams API
• Akka Streams
• MongoDB Reactive Java Driver
• Ratpack
• Reactive Rabbit
• Reactor
• RxJava
• Vert.x
Implementations
Java 9 Flow API
Where to use it?
Reactive In Practice
Java 8 vs Reactive
• Work with multiple streams
• Have multiple consumers
• Backpressure
• Very different concurrency model
Reactive
Other Java 9 Features
269: Convenience Factory
Methods for Collections
213: Private Methods on
Interfaces
New Methods on the Streams API
259: Stack-Walking API
238: Multi-Release JAR Files
102: Process API Updates
277: Updated Deprecation
224: HTML5 Javadoc
225: Javadoc search
JShell (REPL)
https://java.net/downloads/ado
ptopenjdk/REPL_Tutorial.pdf
We’d Love Your Help
https://youtrack.jetbrains.com/i
ssue/IDEA-161611
The Pain
Your code might break!
Try it out now to find out
sooner, not later
• 214: Remove Deprecated GC Combinations
• 231: Remove Launch-Time JRE Version
Selection
• 240: Remove the JVM TI hprof Agent
• 241: Remove the jhat Tool
• 260: Encapsulate Most Internal APIs
• 289: Deprecate the Applet API
• 298: Remove Demos and Samples
Going Away
• 158: Unified JVM Logging
• 223: New Version-String Scheme
• 245: Validate JVM Command-Line Flag
Arguments
• 248: Make G1 the Default Garbage Collector
• 271: Unified GC Logging
Possible Unexpected Behaviour
Java 9 is still evolving
So are the tools we use
Don’t rush in to
modularisation
It might not be for you
Reactive Streams are not the
same as Java 8 Streams
Different behaviour, different
use cases
The Gain
Encourages good design
Encourages new ways of working
Just a bit nicer to write code
http://bit.ly/RealJ
ava9

Real World Java 9