2012-05-03 28 views

Respuesta

24

El costo es cercano a cero, no vale la pena preocuparse.

Algunos detalles adicionales:

  • no hay aumento en el tamaño de cada objeto ejemplo
  • Hay un pequeño aumento en el tamaño de la propia clase, pero como esto es un coste de una sola vez es trivial cuando se amortiza en un gran número de instancias
  • Puede haber un ligero costo de tiempo de ejecución adicional para todo lo que necesite hacer controles de interfaz en tiempo de ejecución (reflexión, instancias de consultas, presión extra en cachés en línea, etc.). De nuevo, es probable que esto sea insignificante para la mayoría de los propósitos.
  • Serializable es una interfaz de marcador , no hay métodos que requieran implementación. Otros ejemplos de interfaz de marcador son: Clonable, SingleThreadModel, detector de eventos.
24

A menos que usted/alguien más realmente serialice/deserialice, no habrá ningún impacto. Serializable es solo una interfaz de marcador.

Probablemente solo aumente el tamaño del bytecode generado en unos pocos bytes.

+0

Gracias, pensé que también. – AChoice

24

No hay impacto en el rendimiento a menos que realice la serialización/deserialización, pero hay compensaciones en términos de diseño de API.

De Effective java por Joshua Bloch

  • Un mayor costo de implementar Serializable es que disminuye la flexibilidad de cambiar la implementación de una clase una vez que ha sido lanzado
  • Un segundo costo de implementar Serializable es que aumenta la probabilidad de errores y agujeros de seguridad
  • Un tercer costo de la implementación de Serializable es que aumenta la carga de las pruebas asociadas con la liberación de una nueva versión de una clase

Hasta qué punto estos son aplicables a usted dependen de su uso.

+0

No hay impacto en el rendimiento incluso si * haces * serialización/deserialización, porque si no implementas 'Serializable' no puedes hacer eso para que no haya nada con que compararlo. – EJP

+0

Gracias por la cita de Joshua. Estoy de acuerdo. – AChoice

+0

Honestamente, no implementaría Serializable sin leer primero ese libro eficaz de Java. –

0

Serializable es solo una interfaz de "marcador". No requiere que implemente ningún método.

Lo único es que se recomienda tener un static final long serialVersionUID para ayudar a la API de serialización. Eso cuesta un solo valor de long por clase serializada.

Es posible que desee comprobar this article about Java Serialization API. Describe la mayoría de las advertencias de serialización/deserialización en detalle.

1

Siempre debe considerar primero la sobrecarga de mantenimiento.El costo de una aplicación desplegada durante su vida útil puede ser varias veces el costo de desarrollarlo.

En este caso, el costo de hacer una clase Serializable, pero que en realidad no se utiliza para la serialización podría causar errores o confusión mucho mayor que el costo de rendimiento. p.ej. Digamos que lleva un minuto o es tiempo de que alguien determine que el Serializable no es necesario, esto puede costar mucho más que los pocos nano segundos de tiempo de inicio adicionales en los que incurre la aplicación.

Si realmente necesita que sea Serializable, no puede compararlo con la versión no serializable porque solo el primer caso realmente hará el trabajo requerido.

Cuestiones relacionadas