В настоящее время у меня есть четыре различных java-приложения, которые запускаются баночками, запущенными .bat-файлами, размещенными в папке с открытием в главном меню Windows XP Embedded. Я также запускаю Firefox. Теперь либо Firefox, либо одно из приложений Java просто выключается. Угадай, что у меня закончилась память (Win XP Embedded с 512 МБ ОЗУ).Использование памяти JVM, одна JVM с потоками или четыре JVM для каждого из моих четырех приложений?
Четыре Java приложения являются,
- HMI бэкенд (встроенный с Спарк "микро" Framework)
- Регистратор приложение, которое записывает данные из PLC в базу данных H2. Это с помощью Timer/Timertask
- Сервер базы данных h2
- Планировщик для выполнения периодических заданий. Это с помощью кварца.
Итак, каждое из этих Java-приложений запускается в их собственной JVM (насколько мне известно). Первый вопрос: могу ли я уменьшить использование памяти этих четырех приложений, запустив их в одной JVM вместо четырех. Если да, то это потоки, которые я должен использовать для запуска каждого из этих приложений?
Кроме того, что является первой основной задачей, которую я должен сделать, чтобы уменьшить объем памяти, являющийся совершенно новым для «реального» Java-программирования, как и я. H2, повторно использовать объекты и что еще? Jconsole и этот материал Xmx?
Удовлетворительно наивно, но я действительно думал, что эй, GC позаботится обо мне "все". Думаю нет? =)
Редактировать: Бэкэнд HMI использует веб-сервер Jetty. Кроме того, весь код является либо Open Source, либо построен мной.
Редакция 2: Веб-каркас: http://www.sparkjava.com/. Я обслуживаю статические носители через фреймворк, а не через Jetty (jetty-webapp-7.3). Возможно, это поможет улучшить использование памяти? Другими компонентами веб-приложения HMI являются механизм шаблонов freemarker, gson, servlet-api-3, slf4j и log4j.
Возможно, попытка запуска регистратора и планировщика в потоках при запуске webapp может быть возможна. Затем нужно запустить только две JVM. Один для webapp и один для сервера базы данных.
Я использую Java 7 и 32-битную систему. Это, надеюсь, будет для использования в производстве (или у меня проблемы).
У меня такое чувство, что все рабочие места плотно интегрированы, поэтому вы должны попытаться запустить их с одним основным. Это уменьшит потребность в памяти и потребности процессора. – tom
@tom - Я не знаком с некоторыми из упомянутых компонентов, но мне кажется, что они по сути являются «черными ящиками», которые не могут быть перепроектированы волей-неволей? Или я не понимаю? –
Это виртуальная машина, о которой мы говорим? Поскольку 512 МБ ОЗУ в эти дни кажется из другого мира ... –