For the following article, please note that this information is only valid for Java 8 or higher. At the time of this writing, we offer Java 8 and Java 9 to our customers for general use on their servers.
Java 8 has two memory spaces:
Metaspace memory (replaces PermGen memory in Java 7)
Heap memory is the regular memory assigned to your server. This is where all the player data, world data, mod data, and otherwise is loaded into. The more players, regions, and so forth that are loaded, you'll need more Heap memory.
Metaspace memory is the area where Java stores information that is commonly shared among the various data loaded into Heap memory. For example, each player has a data set referred to as Player. The Player data definition (or class) is loaded into the Metaspace memory, then the actual Player data is stored in the Heap.
Metaspace, by default, expands as much as it needs to, up to what the physical system behind your server can provide. While this is ideal for single or few Minecraft servers for a single server owner, this does not work out well for a server hosting company as it begins to become unfair for other servers as they begin to grow or for servers just being turned on. In order to ensure the stability of your server, we enforce Metaspace limitations that can be modified by following the instructions in this article (click here).