I attended the JAX London "The Conference for Java and Software Innovation" earlier this week. It was a great opportunity to keep up to date with what is happening with the core technologies that I have been using in my day to day work for most of my career so far. This post is a brief summary of some of my favourite tidbits.
In serverless computing size matters - smaller containers and apps mean less time is required for data transfer, and fewer class files mean less time for class loading which all feeds into how long it takes for the environment to be ready to execute.
Later releases of Java no longer have the concept of separate smaller
JRE. If you want to deploy applications without the full JDK then
jlink can be used to build a custom runtime image which only includes
the modules that your app requires.
Efficiency improvements at scale can have environmental benefits - requiring fewer servers to perform the same work means less electricity is consumed.
It's okay to not know about every technology out there. Just as I was contemplating building up a mindmap of major technologies and the main current implementations, the presenter up front described how many different aspects there now are to software development - development tools, languages, deployment containers, continuous integration systems, service meshes, content delivery networks... - that's just some of the back end, I can't imagine anyone keeping a straight face when claiming to be a full stack developer and keeping up to date to the same extent.
Sometimes incrememental improvements will be the best path to improving an existing system. Measure what it is currently doing, adjust something that looks like it is having an impact on the key performance indicator then measure again - rinse and repeat.
Other times it's best to throw away and start again - e.g. garbage collection settings when upgrading JDK version. The settings that made sense on Java 8 may not be necessary or optimal in Java 11. This will really be the case if you're using CMS as that is not expected to even exist in later versions of the JDK.
JVM startup time regressed from Java 8 to Java 9, but has improved in subsequent releases. That might explain why AWS's Lambda implementation didn't move forward from Java 8 to Java 9 (not being a long term support version would also be a factor).