У меня есть проект, который я пишу (на Java) для класса, где профессор говорит, что нам не разрешено использовать более 200 м. . Я ограничиваю память стека 50 (только, чтобы быть абсолютно уверены) с -Xmx50m, но в соответствии с верхней, она по-прежнему с использованием 300мJava использует гораздо больше памяти, чем выделено с -Xmx
Я попытался запустить Eclipse Memory Analyzer и сообщает только 26м
Может ли это все быть память на стеке ?, Я довольно уверен, что я никогда не пойду дальше, чем около 300 вызовов методов в глубину (да, это рекурсивный поиск DFS), так что это должно означать, что каждый стек стека использует почти мегабайт, который, кажется, трудно поверить.
Программа однопоточная. Кто-нибудь знает какие-либо другие места, в которых я мог бы уменьшить использование памяти? Кроме того, как я могу проверить/ограничить, сколько памяти использует стек?
UPDATE: Я использую следующие параметры виртуальной машины Java теперь без эффекта (еще около 300 м в зависимости от топ): -Xss104k -Xms40m -Xmx40m -XX:MaxPermSize=1k
другого UPDATE: На самом деле, если я смочите немного больше (со всеми этими варианты) примерно в половине случаев, когда он внезапно падает до 150 м через 4 или 5 секунд (другая половина не падает). Что делает это действительно странным, так это то, что моя программа не имеет стохастичности (и, как я уже сказал, это однопоточный), поэтому нет причин, по которым она должна вести себя по-разному на разных трассах.
Может ли это иметь какое-то отношение к JVM, который я использую ?
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.3) (6b27-1.12.3-0ubuntu1~10.04)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Согласно java -h, JVM по умолчанию - это -сервер. Я попробовал добавить -cacao и теперь (со всеми другими вариантами), это всего 59 м. Поэтому я полагаю, что это решает мою проблему. Может ли кто-нибудь объяснить, почему это было необходимо? Кроме того, есть ли какие-то недостатки, о которых я должен знать?
Еще одно обновление: какао действительно очень медленное по сравнению с сервером. Это ужасный вариант
Память кучи и память стека настраиваются отдельно. Память, которую вы видите в верхней части, включает и то, и другое. – dnault
Я понимаю это, но я не думаю, что это стек памяти. Я не так много использую. Итак, где еще может быть память с – dspyz
Вы также устанавливаете минимальный размер кучи? Если '-Xms' больше, чем' -Xmx', я думаю, что он использует до -Xms' –