CodeOne 2018


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-

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.

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.