I was looking at cowtowncoder’s low-gc-membuffers, which led me to look at an introduction to Byte Buffers and the corresponding javadoc.
In short, ByteBuffer is part of the Java NIO and basically allows you to play with memory outside the garbage-collected Java heap.
An interesting/unintended take away from the intro-to-byte-buffers article is the interlude on virtual memory. Gregory explains the concept of commit charge and resident set size (RSS). The commit charge is the amt of in-memory data that is modifiable. This is limited by RAM+swap and the amt of in-memory data used by other programs. RSS refers to the program’s memory/virtual-pages that are in the RAM. Hence, full GCs can be slow because of the need to touch every live object, and hence every page in the heap and generating page faults for pages not in the RAM.