Java 8 makes significant changes to the JVM memory model which are important to understand when running a high scale production environment. The first half of this session will cover the basics of Java memory and garbage collection including changes introduced by Java 8. The second half of this session will address the increased the consequence of running a production JVM inside a container environment which is an increasingly common scenario for micro service architectures involving docker.
This session will cover in details the concepts and tooling necessary to understand and manage Java 8 JVM in a productions environment. We will start with memory basics; the stack and the heap. The session will cover Java 8's Metaspace and changes in "perm". The information will be useful to developers as well as ops teams. The session will then dive into garbage collectors comparing differences between java 7 and java 8 for each of; oldParallelGC, CMS and G1. Memory, Thread and JMX tool demonstrations are included to help bring with comprehension.
The last portion of the session we will cover details of linux memory and cpu management with cgroups. The session will highlight the difference between cpu sets and cpu shares with a focus on cpu shares (which is the default for most container technologies such as Docker). This session will walk through the consequences of deploying Java in a container and discuss how to manage it.