What can I say, it was an amazing experience.. Great speakers who really knew what they were talking about, good facilities, good beer (though very limited amounts) from Atlassian.
There were quite an abundance of presentations about functional programming, which seems to gain large amounts of hype currently. I attended most of these and they proved quite interesting. Other things I found interesting were a peek to Java memory model & GC logging output, Java concurrency synchronizers and some Raspberry Pi thingies (I happen to own one).
As you might already have realized, modern computers come with CPU’s equipped with usually more than one core, e.g. my working laptop has 2 cores / 4 threads (hyperthreading), or even with more than one CPU (e.g. server machines). If we go back in time for about 7-8 years, there were about an even number of multi- and single-core processors in computers out there. The reason of using multiple cores (or CPU’s) over one really fast core is dictated by the laws of physics – you just can’t keep cramming millions of transistors to an ever smaller growing piece of silicon because after a crucial point, the whole thing will just melt down when you power it up. So, to avoid meltdowns (and other side effects), simply multiply the core to gain more processing power.. the only gotcha there is that all this new potential is unleashed only when a program executes it’s operations in parallel – bummer..
filter = Get a subsequence from a list of values.
map = Apply a function to a list of values and return a list of values.
reduce = Apply a function to a list of values and return a single value.
Java memory model & GC logs
I went to the presentation by Kirk Pepperdine where he explained the Java memory model and the function of the generational garbage collector, regional garbage collector and the output of GC logs. As there are ever increasing memory requirements for applications, it creates considerable strain to the Java Gargabe Collector. Much can be learned through GC logs when profiling an application that has performance and or high memory consumption issues. High memory footprint always creates more work for the GC and it should always be avoided if possible since a full mark-sweep to tenured memory space (the big part of the memory pool) is going to take a long time. During a mark-sweep, the objects in memory are checked for wheter they’re alive or not and during this time any mutator thread is put to a full halt (mutator thread is your application’s thread, doing it’s things).
For alleaviting pains in heavy GC action in an application using a generational GC, one could try using a regional GC that basically functions as the generational one but with regioned memory (1MB – 32MB regions). Regional garbage collectors: Oracle’s G1GC, IBM’s Balance and Azul’s C4.
All in all, I had a very enlighting and nice time in Jfokus 2013. I recommend. Be sure to check http://www.jfokus.se/jfokus/recordings.jsp every once and a while as this years presentations will be made available there.
If you’re interested in other topics such as Simon Ritter’s RPi toys (a robot arm controlled by a playstation game controller clone or mind controlled lego thingy) or Dr. Heinz Kabutz’s Java concurrency synchronization using Phaser / StampedLock, you can contact me by email (first.last(at)ambientia.fi).
Jfokus 2013 presentations