Згідно з API
totalMemory()
Повертає загальний об'єм пам'яті у віртуальній машині Java. Значення, що повертається цим методом, може змінюватися з часом, залежно від середовища перебування. Зауважте, що обсяг пам'яті, необхідний для вмісту об'єкта будь-якого типу, може залежати від реалізації.
maxMemory()
Повертає максимальний об'єм пам'яті, яку намагатиметься використовувати віртуальна машина Java. Якщо немає властивого обмеження, то значення Long.MAX_VALUE повернеться.
freeMemory()
Повертає кількість вільної пам'яті у віртуальній машині Java. Виклик методу gc може призвести до збільшення значення, поверненого freeMemory.
Посилаючись на ваше запитання, maxMemory()повертає -Xmxзначення.
Вам може бути цікаво, чому існує загальна Пам'ять () І maxMemory () . Відповідь - JVM виділяє пам'ять ліниво. Скажімо, ви запускаєте процес Java як такий:
java -Xms64m -Xmx1024m Foo
Ваш процес починається з 64 Мб пам'яті, і якщо і коли йому потрібно більше (до 1024 м), він виділить пам'ять. totalMemory()відповідає обсягу пам'яті, доступної в даний час в JVM для Foo. Якщо JVM потрібно більше пам'яті, він ліниво виділити його до до максимальної пам'яті. Якщо ви працюєте з -Xms1024m -Xmx1024m, значення, яке ви отримаєте, totalMemory()і maxMemory()буде рівним.
Крім того, якщо ви хочете точно обчислити об'єм використовуваної пам'яті, зробіть це за допомогою наступного розрахунку:
final long usedMem = totalMemory() - freeMemory();
-XmxЗначення , здається, безпосередньо впливає на початковеmaxMemory()значення , однак я бачив ЗафіксованоmaxMemory()зростання на невелику величину, можливо , ~ 1%, в той час як програма працює.