Как использовать виртуальную память (swap в файловой системе Linux) в веб-программировании на Java

StackOverflow https://stackoverflow.com/questions/1506634

Вопрос

Я работаю в веб - приложении Java .В каком-то разделе я использую очень огромную древовидную переменную, которая сохраняется в памяти (RAM).Могу ли я перенести это в виртуальную память (swap).примечание :огромное дерево состоит из имени и адреса электронной почты для всех пользователей, которые используют в предложении текстовое поле Ajax.

Это было полезно?

Решение

В Linux не существует стандартного способа принудительной замены блока памяти, поэтому у JVM не будет возможности попросить ОС выполнить такую задачу.

Лучшее, что вы можете сделать, если вам нужна эта функциональность, - это сериализовать дерево и записать необработанные данные в файл на диске, а затем вернуть их обратно, когда вы будете готовы к этому.

Но вы, вероятно, не хотите этого, потому что запись на диск - это чрезвычайно медленный по сравнению с вводом-выводом в физическую память.

В данном случае, пусть операционная система побеспокоится об этом.Можно с уверенностью предположить, что он знает лучший способ управления памятью, чем вы.

Другие советы

Пусть об этом позаботится ОС, которую использует ваш пользователь.

Работающий Java-образ, который частично выгружается для замены, является мертвым Java-образом.Как только заработает достаточно энергичный сборщик мусора, вы сможете вернуть все на страницу.Страница достаточно плохая.Если у вас на самом деле недостаточно оперативной памяти для всего этого, вы в конечном итоге получите трясущийся и не отвечающий на запросы сервер.Страничная Java — это плохо (tm).

Если у вас достаточно оперативной памяти для всего этого, вам вообще не нужен своп.

Поместите свой список в таблицу базы данных на диск, проиндексируйте его, ограничьте наборы результатов и сделайте к нему правильные запросы.Это будет чистая победа, и БД сможет кэшировать те страницы, которые ей нравятся больше всего, так что вам не придется об этом думать.

Или получить больше оперативной памяти.

Ваша ОС автоматически управляет своей памятью и при необходимости помещает данные в файл подкачки.

Если у вас много данных, возможно, вы захотите хранить их в базе данных, а не в огромном дереве в памяти.Это, вероятно, позволит вашему приложению лучше масштабироваться, а также может повысить производительность - это, безусловно, даст вам лучшую производительность, чем чтение и запись всей структуры на диск всякий раз, когда вам нужно найти или изменить запись.

Редактировать:Вам не обязательно настраивать выделенный компьютер с базой данных.Учитывая, что вы сейчас пытаетесь сохранить все свои данные в памяти, вы, вероятно, можете использовать встраиваемую базу данных, например HSQLDB или SQLite, размер которых ограничен 16 ГБ и 2 ТБ соответственно.

Мне кажется интересным, что все говорят ему, что хранение элементов на диске ужасно неэффективно, и в то же время рекомендуют ему использовать базу данных, возможно, удаленную, которая будет хранить данные на диске..на другой машине..

Вы предполагаете, что система будет более эффективна при слепой обработке файла подкачки, чем если бы на файл подкачки влиял код, который знает, что нас ждет в будущем.Гораздо эффективнее выгрузить память, которая, как вы знаете, не будет использоваться какое-то время, чем система будет просматривать все элементы в памяти и пытаться эффективно поместить некоторые из них в этот файл.

Конечно, хоть и ошибаетесь, но в чем-то вы все правы..ЛОКАЛЬНАЯ база данных будет наиболее эффективным способом хранения данных в ФАЙЛЕ (где они будут записываться и читаться).Если у вас нет доступа к локальной базе данных, напишите ее.Хэш-карта предназначена для хранения в памяти, а упорядоченный индексированный связанный список — для хранения на диске.Попытка выполнить передачу данных напрямую из памяти на диск без учета эффективности обоих носителей неэффективна.

Как насчет другого взгляда на ту же проблему:Я создаю много PDF-файлов на стороне сервера, у меня есть десятки из тысяч клиентов, которые обычно хотят запускать отчеты в одно и то же время месяца.Средний размер PDF может составлять 7–10 МБ.При наличии конечной кучи «замена» данных во временный файл является допустимым способом создания PDF-файлов, поскольку мне нужно иметь возможность установить длину контента в ответе перед потоковой передачей данных PDF клиенту.

Возможно, вместо того, чтобы просто подвергать сомнению дизайн, могут пригодиться некоторые полезные опции.Лично я рассматриваю возможность использования либо одного временного файла для каждого процесса, либо одновременного доступа к одному файлу подкачки.

Что ты предлагаешь?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top