Является ли сериализация Java инструментом для сокращения объема памяти? - PullRequest
5 голосов
/ 27 мая 2010

всегда ли сериализация в Java должна уменьшать объем памяти, используемой для хранения структуры объекта? Или вероятно, что сериализация будет стоить дороже?

Другими словами: Является ли сериализация инструментом, позволяющим уменьшить объем памяти структур объектов в Java?


Редактировать
Я полностью осознаю, для чего предназначена сериализация, но все равно спасибо :-) Но вы знаете, инструменты могут быть использованы не по назначению. У меня вопрос, является ли это хорошим инструментом для уменьшения использования памяти.

Так что же причин вы можете себе представить, почему использование памяти должно увеличиваться / уменьшаться? Что будет в большинстве случаев ?

Ответы [ 6 ]

6 голосов
/ 27 мая 2010

Нет ... сериализация - это способ записи или чтения представления состояния объекта в виде байтового массива. Это не альтернативное представление в памяти. Сериализованная форма объекта может потреблять или не использовать больше байтов, чем внутри JVM; как правило, это было бы вполне сопоставимо. В редких случаях это может быть больше, а иногда состояние объекта может быть полностью сериализовано таким образом, что потребляет меньше байтов, чем в куче. Но нет, чтобы ответить на вопрос, это не «инструмент для сокращения объема памяти».

2 голосов
/ 27 мая 2010

У меня вопрос, является ли это хорошим инструментом для уменьшения использования памяти.

Нет, это не очень хороший инструмент для этого. Сериализованное представление объекта включает в себя множество «метаданных», которые описывают тип и представление объекта. Если вы не сериализовали значительное количество объектов в один «поток», издержки «метаданных» сделают сериализованную форму больше, чем исходная форма. Игнорируя эти издержки, сериализованное представление обычно более компактно, но сохранение будет зависеть в значительной степени от типов представления объекта. (Подробнее см. «Протокол потока сериализации объектов» .)

И, как упоминалось в других ответах, вы временно увеличиваете использование памяти при сериализации и десериализации, потому что вам нужно хранить как последовательное, так и объектное представления И карту, используемую для работы с циклами и т. Д.

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

1 голос
/ 27 мая 2010

Единственный способ уменьшить объем памяти - сериализовать некоторый объект с переходными полями, сбросить исходные объекты и десериализовать - таким образом вы потеряли объекты в переходных полях.

0 голосов
/ 27 мая 2010

Я говорю, МОЖЕТ БЫТЬ ДА (если shrink == расти / увеличиваться), потому что сериализация сохраняет представление объекта в памяти во время его процесса.

Если вы хотите остановить это, вам нужно вызвать close или сбросить в ObjectOutputStream.

Если вы вызываете новый ObjectOutputStream / close, после закрытия нет места в памяти.

0 голосов
/ 27 мая 2010

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

0 голосов
/ 27 мая 2010

При сериализации объектов значения всех (не переходных) полей и некоторых дополнительных данных управления записываются в буфер (поток).Обычное намерение - записать этот буфер в файл или сокет.На сериализованные объекты это не влияет.

Так что на самом деле все наоборот: сериализация (временно) увеличивает объем памяти, поскольку сериализованное представление объекта также будет находиться в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...