Ответ 1
Фиксированный размер - это фактически выделенная память, используемый размер - это размер, используемый для хранения фактических данных (при использовании ~ = зафиксировано это время для основного GC и, возможно, увеличения кучи). Максимальный размер - это жесткий предел, на который может наступить куча - если этого недостаточно, JVM выбрасывает OutOfMemoryError.
Если память зафиксирована, она может быть использована. Кроме того, единственный случай, когда JVM не сможет зафиксировать больше памяти (на современной ОС), - это если аппаратное обеспечение отсутствует в виртуальной памяти.
Все эти размеры говорят только размер области кучи. JVM также имеет другие области памяти (потоки потоков, JIT-кеш и т.д.). Область кучи обычно наибольшая, что примерно соответствует отпечатку процесса.
Две заметки:
- если фиксированный размер не помещается в физическую память, его части будут заменены на файл страницы. Это приводит к большому замедлению во время GC, и в таких случаях вы улучшите производительность приложения, уменьшив размер кучи.
- некоторые операционные системы позволяют удваивать резервирование памяти - вы можете выделить столько, сколько хотите, если не пытаетесь использовать его (забыли, какая ОС была - кто-то меня заполнил).