Summary
In this chapter, we zoomed in on the Metaspace (formerly known as PermGen). The Metaspace is a special area of non-heap memory reserved for a class’s metadata. The metadata consists of information enabling the JVM to work with the class: for example, method bytecode, constants, and annotations. When a class is first used, its metadata is loaded into the Metaspace. An example is the creation of an object for the first time.
By default, the native memory available to the Metaspace is unlimited. A maximum Metaspace size is configurable using the JVM –XX:MaxMetaspaceSize
flag. A threshold value or high-water mark can be set initially using the –XX:MetaspaceSize
flag. If a threshold value is set and reached, this induces a run of the garbage collector. Using both JVM flags, –XX:MinMetaspaceFreeRatio
and –XX:MaxMetaspaceFreeRatio
, in conjunction with garbage collection results, we can dynamically influence the high-water mark and, therefore,...