In the previous chapters, we noted how Clojure interoperates with Java. In this chapter we will go a bit deeper to understand the internals better. We will touch upon several layers of the entire stack, but our major focus will be the Java Virtual Machine (JVM), in particular the Oracle HotSpot JVM, though there are several JVM vendors to choose from (http://en.wikipedia.org/wiki/List_of_Java_virtual_machines). At the time of writing, Oracle JDK 1.7 is the latest stable release, and early OpenJDK 1.8 milestones are available. In this chapter we will discuss:
How the hardware subsystems function from a performance viewpoint
Organization of the JVM internals and how that is related to performance
How to measure the amount of space occupied by various objects in the heap
How to profile Clojure code for latency using Criterium