Есть ли штраф за добавление
implements Serializable
для класса Java? Влияние на размер создаваемого объекта или производительности?
Есть ли штраф за добавление
implements Serializable
для класса Java? Влияние на размер создаваемого объекта или производительности?
Стоимость близка к нулю, не стоит беспокоиться.
Дополнительная информация:
Если вы/кто-то еще не сериализует/десериализует, никакого воздействия не будет. Serializable
- это только интерфейс маркера.
Вероятно, это только увеличит размер сгенерированного байт-кода на несколько байтов.
Эффект не влияет на производительность, если вы не выполняете сериализацию/десериализацию, но есть компромиссы в плане дизайна api.
Из Эффективная java от Джошуа Блоха
- Основная стоимость внедрения Serializable заключается в том, что он уменьшает гибкость для изменения реализации классов, как только он был выпустила
- Вторая стоимость реализации Serializable заключается в том, что она увеличивает вероятность ошибок и дыр в безопасности.
- Третья стоимость внедрения Serializable заключается в том, что она увеличивает нагрузку на тестирование, связанную с выпуском новой версии класса
В какой степени они применимы к вам, зависит от вашего использования.
Вы всегда должны сначала учитывать затраты на обслуживание. Стоимость развернутого приложения за его живое может быть в несколько раз выше стоимости его разработки.
В этом случае стоимость создания класса Serializable, но фактически не используется для сериализации, может привести к ошибкам или путанице, намного превышающим стоимость исполнения. например скажем, требуется 1 минута или кто-то время, чтобы определить, что Serializable не требуется, это может стоить гораздо больше, чем несколько нано-секундных дополнительных стартапов, выполняемых приложением.
Если вам действительно нужно быть Serializable, вы не можете сравнить его с версией, отличной от Serializable, потому что только первый случай действительно выполнит требуемую работу.
Serializable
- это просто "маркерный" интерфейс. Это не требует применения каких-либо методов.
Единственное, что рекомендуется использовать static final long serialVersionUID
, чтобы помочь API сериализации. Это стоит единственное значение long
для каждого сериализованного класса.
Возможно, вы захотите проверить эту статью о Java Serialization API. Он описывает большую часть оговорок сериализации/десериализации в деталях.