Если говорить о памяти, которую ПО на Java может взять у ОС, то она делится на кучу, кэш классов, стэк потоков и память, выделяемую низкоуровневыми библиотеками (native). Инструментами Java можно получить все данные, кроме native-памяти. Они могут делиться на heap и non-heap.
Ещё память делится на такие классы:
Reserved - JVM говорит ОС, что ей может потенциально понадобиться столько памяти. ОС выделяет ей такой непрерывный блок в виртуальной памяти, фактически ничего не выделяется. Размер виртуальной памяти на x64 огромный, ОС не жалеет раздавать сколько угодно reserved.
Commited - JVM явно попросило ОС в пределах reserved выделить память через механизм malloc или отображением файла - mmap. ОС выделяет память, отдаёт JVM. Можно увидеть как параметр RSS в списке процессов. Хотя RSS не учитывает совместно используемые страницы памяти.
Used - JVM как-то пользуется выделенной памятью. Или не пользуется.
Init - размер commited при старте, задаётся параметром Xms. Увеличивается при необходимости автоматически до значения Xmx. Если не хватает - падаем с ООМ.