2014-01-04 3 views
1

проблема Я пишу приложение для обработки данных в java для моей малины-пи. Я использую postgresql, hibernate и tomcat. Мое приложение предназначено для минимального использования памяти (из-за ограничений малины-пи), но Java требует всю память. Как я могу дать JVM возможность использовать ТОЛЬКО требуемую память.Как сохранить память, используемую JVM под контролем?

алгоритм Для prcess каждого элемента данных я выполнить следующие шаги: - извлечения объекта из таблицы (ссылка на объект) - для каждого объекта в таблице: - получить объект - сравните ссылки если тест действителен, сохраните новый объект во второй таблице - уничтожить объекты

JVM по умолчанию не освобождает память, но требует все больше и больше памяти постепенно.

вопрос Какие варианты JVM можно использовать? И какие программные страты я могу использовать?

+0

Используйте профайлер для find- какая часть вашего кода потребляет память. Могут быть какие-то «скрытые» проблемы, например, если вы хотите экземпляр List и используете конструктор по умолчанию, java создает список из 10 элементов. И если вам нужен список только для 5 элементов, тогда вызовите конструктор с параметром '5', а не вызовите конструктор по умолчанию. И так далее. Я также рекомендую взглянуть на код java souce. Он находится в src.zip в вашей домашней папке JDK. –

ответ

0

«Java VisualVM может позволить разработчикам создавать и анализировать дампы кучи, отслеживать утечки памяти, выполнять и контролировать сбор мусора, а также выполнять легкую память и профилирование ЦП». Этот инструмент замечательный. Вы попробуете это. http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html

2

Вы можете управлять размером кучи с -Xmx в качестве опции JVM. Далее я бы предположил, что postgresql и hibernate - это богов памяти. Вы можете попробовать с дерби и empired-db или простой старый JDBC, в зависимости от сложности вашего приложения. У меня есть tomcat 7, работающий на малине pi, чтобы оцифровать некоторые данные датчиков и обслуживать графики. С ps он утверждает, что RSS составляет всего 50 МБ.

USER  PID VSZ RSS ST %CPU %MEM  TIME CMD 
pi  19633 257988 50040 Sl 0.2 10.0 00:29:32 java -cp WEB-INF/classes:libs/tomcat-embed-core-7.0.37.jar:libs/tomcat-embed-logging-juli-7.0.37.jar:libs/raytion-commons-web.jar:libs/commons-exec-1.1.jar:libs/commons-cli-1.2.jar:libs/commons-lang-3.0.jar:libs/tomcat-embed-logging-log4j-7.0.37.jar:libs/log4j-1.2.16.jar:libs/joda-time-2.3.jar:libs/tomcat-embed-jasper-7.0.37.jar: -Ddatadir=../Heizungsdaten server.WebServer 
1

настройте флаг -Xmx с максимальной памятью, что вы хотите, разрешите jvm.

например:

java -Xmx256m ... 

разрешить только 256 мега памяти

Если вы используете сервер, как коту, JBoss, определить -Xmx на конкретный файл конфигурации

Смежные вопросы