Подтвердить что ты не робот

Штраф за внедрение Serializable в Java?

Есть ли штраф за добавление

implements Serializable

для класса Java? Влияние на размер создаваемого объекта или производительности?

4b9b3361

Ответ 1

Стоимость близка к нулю, не стоит беспокоиться.

Дополнительная информация:

  • Нет увеличения размера каждого экземпляра объекта
  • Небольшое увеличение размера самого класса, но поскольку это одноразовая стоимость, это тривиально, когда амортизируется в большом количестве экземпляров.
  • Может быть небольшая дополнительная стоимость исполнения для всего, что необходимо для проверки интерфейса во время выполнения (отражение, поиск instancof, дополнительное давление на встроенные кеши и т.д.). Опять же, это, вероятно, будет незначительным для большинства целей.
  • Serializable - это интерфейс маркера, нет методов, которые необходимо реализовать. Другие примеры интерфейса маркера: Clonable, SingleThreadModel, прослушиватель событий.

Ответ 2

Если вы/кто-то еще не сериализует/десериализует, никакого воздействия не будет. Serializable - это только интерфейс маркера.

Вероятно, это только увеличит размер сгенерированного байт-кода на несколько байтов.

Ответ 3

Эффект не влияет на производительность, если вы не выполняете сериализацию/десериализацию, но есть компромиссы в плане дизайна api.

Из Эффективная java от Джошуа Блоха

  • Основная стоимость внедрения Serializable заключается в том, что он уменьшает гибкость для изменения реализации классов, как только он был выпустила
  • Вторая стоимость реализации Serializable заключается в том, что она увеличивает вероятность ошибок и дыр в безопасности.
  • Третья стоимость внедрения Serializable заключается в том, что она увеличивает нагрузку на тестирование, связанную с выпуском новой версии класса

В какой степени они применимы к вам, зависит от вашего использования.

Ответ 4

Вы всегда должны сначала учитывать затраты на обслуживание. Стоимость развернутого приложения за его живое может быть в несколько раз выше стоимости его разработки.

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

Если вам действительно нужно быть Serializable, вы не можете сравнить его с версией, отличной от Serializable, потому что только первый случай действительно выполнит требуемую работу.

Ответ 5

Serializable - это просто "маркерный" интерфейс. Это не требует применения каких-либо методов.

Единственное, что рекомендуется использовать static final long serialVersionUID, чтобы помочь API сериализации. Это стоит единственное значение long для каждого сериализованного класса.

Возможно, вы захотите проверить эту статью о Java Serialization API. Он описывает большую часть оговорок сериализации/десериализации в деталях.