Действительно ли сериализация Java является инструментом для уменьшения объема потребляемой памяти?

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

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


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

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

5
задан Peter Wippermann 27 May 2010 в 09:11
поделиться

6 ответов

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

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

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

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

2
ответ дан 14 December 2019 в 01:02
поделиться

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

6
ответ дан 14 December 2019 в 01:02
поделиться

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

1
ответ дан 14 December 2019 в 01:02
поделиться

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

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

0
ответ дан 14 December 2019 в 01:02
поделиться

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

0
ответ дан 14 December 2019 в 01:02
поделиться

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

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

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

0
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: