Да, JVM обязательно вызовет GC, если он достигнет предела кучи (и, вероятно, намного раньше).Если это не поможет, будет выброшено OutOfMemoryError
s.
. Причина, по которой вы видите большее потребление памяти процессом, заключается в том, что опция -Xmx
ограничивает только пространство кучи Java (где объекты Javaвыделяются на).Есть еще несколько областей памяти, используемых JVM дополнительно: пространство для стеков потоков, «PermGen» (где хранятся классы и их код), «прямая» память, выделенная через ByteBuffers
, память, выделенная собственными библиотеками и т. Д.Для некоторых из этих дополнительных областей памяти существуют другие параметры конфигурации, которые позволяют ограничивать их, например -Xss
, но некоторые даже не контролируются JVM.