CodeOne aka JavaOne
JavaOne was the annual conference for Java developers by Sun Microsystems and then Oracle. This year the conference was renamed to CodeOne and was made more general.
There were many parallel tracks in areas like Core Java, Containers, Big Data, Devops, SQL etc. I mostly attended the Core Java and general programming sessions. I’ll share some of my notes and recommendations for sessions. There were a fair number of advertisement-based sessions with very little real valuable information, but I’ll skip mentioning those.
The recorded sessions are already available online on youtube and I have a playlist of the tech sessions.
Talks
Write More Better: Tech Writing for Developers by Elliotte Harold
Elliotte is a writer of several prominent java books. He spoke about technical writing for public products. Some pointers he gave-
- Users get to docs via public search. Prune old versions of docs
- Developers and Users do actually read docs
- Write SEO friendly docs
- Remove/minimize links since users loose context
- Allow users to skim content by being direct, code samples and adding navigation.
- Write in Business casual format. -straight not casual, no jokes, not too personal, not culturally specific.
- Clear concise prose
- One thought per sentence
- Tech writing lives in the “Eternal present” tense. Only exception is a known past or future event.
- Use active voice like - The InputStream reads the file
- Omit needless words
- Write fast, edit later
- Outline in headings, lists and expand later
- Include docs in pull requests
Good resources for tech writing-
Condy? NestMates? Understanding JDK11’s JVM Features by Dan Heidinga
Talk about two JEPs-
- Nest-Based Access Control
- Dynamic Class-File Constantshttps://openjdk.java.net/jeps/309)
NestMates
Field access by nested classes was based on bridge methods. This caused-
- Extra unwrapping
- Widening access
- Extra bytecode
- Broken reflection
With NestMates, class format was changed to make this information native.
The Class class has new methods like getNestHost
, getNestMembers
and isNestmateOf
in the API.
Dynamic Class-File Constants aka condy
In Java7, invokedynamic
aka indy was added for dynamic resolution of a call site ie method resolution. However for constants the solution was still sub-optimal.
condy solves the problems that were a tech-debt problem. condy also enables future innovations around metaprogramming.
The talk has good details about the rationale and the solution.
Another related talk
Below the Fold, Adventures in Constancy with Brian Goetz and Vicente Romero
Type Inference: Friend or Foe by Venkat Subramaniam
Venkat spoke about the various changes in the Java language related to types
Exploring Java Heap Dumps by Ryan Cuprak
Ryan presented how he used the Netbeans profiler API for performing heap dump analysis specific to his code.
He spoke about why you need a heapdump and how general solutions cannot give good answers since they do not have domain or application knowledge.
Instead extend the simple Netbeans profiler API and script your analysis. Some code points
- Entry Point - https://github.com/apache/incubator-netbeans/blob/master/profiler/lib.profiler/src/org/netbeans/lib/profiler/heap/HeapFactory.java
- Profiler lib - https://github.com/apache/incubator-netbeans/tree/master/profiler/lib.profiler/src/org/netbeans/lib/profiler/heap
Good models exist for heap dump analysis.
Reactive APIs of Java 9 by by Venkat Subramaniam
Venkat spoke about Reactive programming and compared Java 8 streams to the Reactive streams.
Is Your JVM Speaking to You? by Kirk Pepperdine
Bunch of information about new logging within the JDK especially around GC information.
Hardware and JVM Design Trends? Those Don’t Affect Me! Or Do They? by Dan Heidinga
Java is changing for the new world. The trends are-
- Moore’s law with better single threaded performance
- Multi-core
- Multi-tenant with bare metal, virtualization and containers
- Fast deployment
- Cloud and Fn
Earlier the JVM would consume all the resources on the host. Now the JVM has to be a better citizen in a container world.
Better container support is coming. Faster startup with features like modules and shared class loading.
Thread Safety with Phaser, StampedLock, and VarHandle by Heinz Kabutz
Talk about low-level concurrency APIs like
- Phasers
- StampedLock
- VarHandle
The Future of Java SE by Aurelio Garcia-Ribeyro
Talk about the new JDK release model.
There was a time a few years back when the viability of the Java community was being questioned. Oracle has not (yet) screwed up too badly with Java. The language is still extremely popular and with changes in process, looks like the ecosystem will be healthy for the near future.
GraalVM hands-on lab
Just read the walkthrough of the lab in this comprehensive blog post
GraalVM is extremely exciting in terms of the range of possibilities. I’m not sure how the licensing (GPL) will impact adoption.
Promising Talks
These are some talks that I plan to view later. The massive list below is going to keep commuting interesting for a while.
Effective Design of RESTful APIs
Robotics on Java Simplified
Always Be Running: Long-Running and Fault-Tolerant Java Services
Serverless Java: Challenges and Triumph
JUnit 5: The Next Step in Automated Testing for Java
Istio: Will a Service Mesh Become the New Service Bus?
Migrating to Modules
Deconstructing and Evolving REST Security
Get Reactive! Programming, Systems, and Microservices
Using Java CompletionStage in Asynchronous Programming
JDK 9, 10, and 11: Pitfalls for the Unwary
Ten Common Mistakes Made in Functional Java
Up and Away: JDK Optimizations
Shenandoah GC: The Next Generation
Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?
Preventing Errors Before They Happen: The Checker Framework
What Lies Beneath
Improve Startup Performance and Reduce Footprint with Application Class Data Sharing
Caching in Applications Still Matters
Effective Unit Testing
One VM to Rule Them All? Lessons Learned with Truffle and Graal
Var with Style: Local Variable Type Inference in Java
Test Automation with Selenium WebDriver, Java, and JUnit
What’s New in the Java Platform Language and Tooling Area
Add Tests to Legacy Code with Approval Tests
Collections Refueled
Helidon: Java Libraries for Writing Microservices
CompletableFuture: The Promises of Java
ZGC: A Scalable Low-Latency Garbage Collector
Enough java.lang.String to Hang Ourselves…
Deep Dive into gRPC
Benefiting from Java 9 Improvements
Project Panama’s Foreign API
Other things
Attendees got a bag (and a water bottle) at the conference. The bag looks fine but not good for real usage.
The food on the other hand was just in-edible. I wonder why they had to lower standards so much on the meals.