У меня есть проект, который я пишу (на Java) для класса, где профессор говорит, что нам не разрешено использовать более 200 м Я ограничиваю память стека до 50 м (просто для того, чтобы быть абсолютно уверенным) с -Xmx50m, но, согласно началу, он все еще использует 300 м
Я попытался запустить Eclipse Memory Analyzer и он сообщает только 26m
Может ли это быть памятью в стеке?, я уверен, что я никогда не пойду дальше, чем около 300 вызовов методов (да, это рекурсивный поиск DFS), поэтому это означало бы, что каждый стек кадра использует почти на мегабайт, который, кажется, трудно поверить.
Программа однопоточная. Кто-нибудь знает какие-либо другие места, в которых я мог бы уменьшить использование памяти? Кроме того, как я могу проверить/ограничить, сколько памяти использует стек?
UPDATE: теперь я использую следующие параметры JVM без эффекта (по-прежнему около 300 м): -Xss104k -Xms40m -Xmx40m -XX:MaxPermSize=1k
Другое ОБНОВЛЕНИЕ: На самом деле, если я позволю ему немного подождать (со всеми этими параметрами) примерно в половине случаев, когда он внезапно опустится до 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 м. Поэтому я полагаю, что это решает мою проблему. Может ли кто-нибудь объяснить, почему это было необходимо? Кроме того, есть ли какие-то недостатки, о которых я должен знать?
Еще одно обновление: cocoa действительно очень медленное по сравнению с сервером. Это ужасный вариант