Apr. 30th, 2008

exceed_er: (Default)
Сегодня после разговора с товарищем об одной небольшой проблеме, я немного погуглил на тему того, что ему сказал. И, как ни странно, обнаружил интересную вещь. Я всегда считал, что если Java "съела" системную память себе под heap, она уже её никогда не отдаст, пока процесс не закончится. Это как бы стандартное поведение Жавы и все с этим примирились. Оказалось, что не совсем так. Стандартные установки 1.6 HotSpot JVM говорят, что если после работы GC свободно 70% heap, то тогда можно отдать системе столько памяти, чтобы осталось 40% heap свободными1. Такая ситуация встречается весьма редко в жизни. Так что если вам действительно нужно запустить Java процесс c редкими пиками использования памяти, и даже факт того, что физически незанятый heap будет слит на диск по pagination и не будет мешать другим процессам, не помогает, то вот решение, которое я только что проверил и отлично сработало на моей IntelliJ IDEA с загрузкой-выгрузкой огромного (200мб) проекта:

-XX:NewRatio=2 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=30
(читать про флаги тут)

[1]больше информации о проблеме и решениях на Сане

UPD: поработал с этими установками в IntelliJ IDEA 2 дня, не выключая. В конце концов началось странное поведение: то говорит что памяти не хватает и просить увеличить -Xmx, хотя там еще 300 мегабайт. То подвисает на минуту-другую неожиданно. Обычно я не закрываю IDEA неделями, и без проблем. Так что, в общем, обращаться надо с осторожностью.

Profile

exceed_er: (Default)
exceeder

November 2016

S M T W T F S
  12345
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2025 09:05 pm
Powered by Dreamwidth Studios