Відповіді:
використовувати аргументи -Xms<memory>
-Xmx<memory>
. Використовуйте M
чи G
після цифр для позначення відповідно Megs та Gigs байтів. -Xms
вказує мінімум та -Xmx
максимум.
-Xmx524M
і процес займає 1,2 ГБ оперативної пам’яті. (?)
Вам не слід турбуватися про те, що стек просочується (це вкрай рідко). Єдиний раз, коли ви можете змусити стек контролюватись, це нескінченна (або справді глибока) рекурсія.
Це просто купа. Вибачте, спочатку не повністю прочитали ваше запитання.
Вам потрібно запустити JVM із наступним аргументом командного рядка.
-Xmx<ammount of memory>
Приклад:
-Xmx1024m
Це дозволить отримати максимум 1 Гб пам'яті для JVM.
-XX:MaxDirectMemorySize
. Не те, щоб я сильно профілювався, щоб переконатися, але все-таки;)
MaxDirectMemorySize
Тільки впливає на буфери NIO. Всі види іншої натурної пам'яті використовуються в JVM.
Якщо ви хочете обмежити об'єм пам'яті для jvm (не розмір купи) ulimit -v
Щоб зрозуміти різницю між jvm і накопичувальною пам’яттю, подивіться цю чудову статтю http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- java-process.html
ulimit
є команда Linux? Я здійснив швидкий пошук у Google, і не побачив жодних стосунків між ulimit
та JVM. Y
Наведена вище відповідь є правильною, ви не можете витончено контролювати, скільки рідної пам'яті виділяє процес Java. Це залежить від того, що робить ваша програма.
Зважаючи на це, залежно від платформи ви можете використовувати якийсь механізм, наприклад, обмежувати розмір Java або будь-який інший процес.
Просто не сподівайтеся, що він вийде витончено, якщо він досягне межі. Збої в розподілі нашої пам'яті набагато складніше вирішити, ніж збої в розподілі на купі Java. Існує досить хороша ймовірність, що додаток вийде з ладу, але залежно від того, наскільки критично важливо система, щоб зменшити розмір процесу, який все ще може вам подобатися.
NativeHeap можна збільшити на -XX: MaxDirectMemorySize = 256M (за замовчуванням - 128)
Я ніколи його не використовував. Можливо, вам це стане в нагоді.