Friday, October 3, 2014

JavaOne 2014 - Tuesday

Hi all, here are my notes of the sessions I attended on Tuesday at JavaOne.

Where is my Memory
Important session about managing memory on your JVM. The speaker introduced us to the different memory regions on the JVM and gave us good advices about how to find memory leaks on your JVM.

Some of the tips we got during the session:

The less options you have at your startup script, the better!

if you want to know default options for your JVM use the following:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version

Of course you always want to go with non-default sizes, but you should go with small increments of memory for your -Xmx and -XX:MaxPermSize options

An Important difference between Java 8 and prior versions of Java is that Java 8 got almost all the naked memory available and if you want to tune it, then you should reduce it

Developers do not think about memory, they don't destroy objects or freed memory because of the Garbage Collector, which is a subsystem of the JVM for reclaiming "unused" memory

There are some objects that are always alive and wont be collected by the garbage collector, which are called GC Roots

  • System classes
  • JNI references
  • Running Threads
  • Local variables or parameters
  • Native stack
  • Used monitors
  • And some others

This is how the garbage collector works:

  • Mark all GC Root as reachable
  • Mark all objects referenced from reachable object as reachable too
  • Repeat until all reachable objects are found
  • Everything else is garbage 

So, what is a Memory Leak?
Reachable objects that will never be used by your application and/or the repetitive creation of such objects. Some examples of memory leaks are:

  • Caches without look-ups and eviction
  • String.substring -> Prior to Java SE 7
  • Immortal threads
  • Unclosed IO streams

The symptoms of your memory leak are either OutOfMemoryError or the application runs too slow due to the excessive GC, but be careful since there may be false positives due to:

  • Too high allocation size 
  • Cache with the wrong size - Check the size of your cache
  • Trying to load too much data at onces - You can use lazy loading
  • Fat data structures - Inneficient datastructures to hold your data

Memory monitoring tools

  • VisualVM/Java Mission Control
  • jStat
  • GC logs - Use the following options -XX:+PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:file.log -XX:+UseGCLogFileRotation -XX:Number at your startup script and then use GC log analyzers such as Fasterj or GCViewer

So you have a memory leak, then try this as first step

  • Reduce memory usage
  • Tune GC
  • Increase Xmx/PermGen

If it doesn't work, then you should try more advanced techniques such as Memory (Heap) dump to find out what consumes memory. Memory dump is a binary representation of objects graph written to a file. Have in mind that it is not an accurate representation of the memory but is good enough to find memory leaks.

In order to get a memory dump you can use one of the following:

  • jmap -dump:format=b,file=heap.hprof
  • Add this options to your startup script:
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof

The tool used to analyze the Memory Dump is Eclipse Memory Analyzer and you should look for objects with the biggest retained size.

A final word from the speaker:
Do not use Profilers to find Memory Leaks!

More information about solving Memory leak can be found at:

Went to the Hackergarten again and during the time I was there I met Werner Keil one of the spec leads of JSR 363: Units of Measurement API, who walked me through the status of the JSR and point me to several documentation sources. This JSR is also available to adopt through the Adopt a JSR program.

RIA Technologies and Framework Panel
There was this excellent panel of experts in the RIA topic. They discussed about the state of art regarding to RIA technologies.

Native or HTML5 ?
There were a lot of opinions here, but at the end, most have agreed that in house development for administrative purposes should go HTML 5. But if you really need to get the best of the platform go native even if you have to do it for three different platforms. The audience were asked if we were doing native development for our mobile projects, just a few raised their hands.
An advice to promote code reuse is to develop your backend to return JSON so your native apps or HTML 5 apps con consume it.

Is JavaFX the future of client side Java?
Some have said Swing is gone, JavaFX is the present of client side Java, but, the audience were asked whether they were building desktop applications and many raised their hands. Then they were asked whether they were using JavaFx or Swing... and most of them are using Swing and are not planning to move to JavaFx... So the question remains and is not clear whether JavaFx is replacing or not Swing.

Last question was about what panelist are excited about for the next years?
Swing + HTML 5 - Andres Almiray
No Wrappers for HTML 5 apps - Max Katz
iOS SwiftKevin Nilson
Curious about what will happen on the UI market - Gerrit Grunwald
What new tools will come up for UI - Sven Reimers

Delivering Oracle ADF Projects: Modern Techniques
This session was really interesting because it was about using modern development techniques on the world of ADF. We saw how we can use plugins for quality of code in ADF. Also explored how testing ADF applications can be automatized by using the Oracle Application Testing Suite. Last but not least, we saw how we can use Maven with ADF. I am excited about this new feature since I've wanted to create a continuous integration environment with ADF for a while. I think I found what my next talk about ADF is going to be...

ODTUG Oracle Developers Meetup
Had the chance to meet ADF celebrities and other ADF developers on the Oracle Developers meetup, an event organized by ODTUG. I could see how popular ADF is becoming, more developers are now working with this technology and are excited about the new releases.

Oracle ADF Enterprise Architects Birds­of­a­Feather Meeting
This session was about architectural challenges that we face when developing with ADF. The session was more Q&A oriented. Some of the participants were Sten Vesterli, Chris Muir and Frank Nimphius. So imagine you, with some ADF questions and having these ADF masters in front of you to help you find your path... that's priceless.

At night we went to the Red Hat party, where we could hangout with Arun Gupta, Kevin Nilson and Dario Laverde. Had some drinks and food and enjoyed the end of day 3 at JavaOne! What a great day.

see ya!