В JVM есть такая опция -Xms. Вы знаете, что она точно означает? Некоторые думают, что это минимальный размер кучи. Другие - что это начальный размер кучи (при старте JVM). Но какой вариант правильный? Это всё-таки минимальный или начальный размер кучи?
Ответ: и минимальный, и начальный.
Откуда вообще взялась путаница? А вот отсюда. Если посмотреть, что пишет в хелпе сам JDK, то там будет следующее:
> java --help-extra
...
-Xms set initial Java heap size
-Xmx set maximum Java heap size
Но при этом в
онлайн документации на сайте Oracle написано по-другому:
-Xms size
Sets the minimum and the initial size (in bytes) of the heap. This value must be a multiple of 1024 and greater than 1 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, or g or G to indicate gigabytes. The following examples show how to set the size of allocated memory to 6 MB using various units:
Это более корректно. Несоответствие заметили буквально недавно и
пофиксили лишь в Java 25. Теперь хелп JDK пишет правильно:
> java --help-extra
...
-Xms set minimum and initial Java heap size
-Xmx set maximum Java heap size
P.S. Есть ещё опция -Xmn, но она означает совсем другое: она указывает начальный (и минимальный) размер
молодого поколения. Эта опция используется редко.