Me pregunto si el rendimiento de una aplicación podría mejorarse utilizando la mayor cantidad posible de superclases. Mi pregunta es sobre Kotlin, pero supongo que la respuesta será la misma para Java.
Digamos que tiene este esquema de herencia (la clase de la derecha es una subclase de la clase de la izquierda):
A < B < C < D < E < F < G < ... Y así sucesivamente hasta Z.
Decir que no necesita todas las cosas definidas en todas las subclases, sino solo los atributos y las funciones de la clase A. Por una razón oscura, su código usa solo la clase Z.
Mi pregunta es bastante simple: si cambia su código para usar solo la clase A en lugar de la clase Z, ¿el código tendrá un mejor rendimiento?
Gracias de antemano por sus respuestas.
Si
"cambie su código para usar solo la clase A en lugar de la clase Z"
incluye construcción, entonces hay una respuesta trivial:
Crear y almacenar un objeto con menos atributos/campos es más económico que crear un objeto con más atributos, tanto en términos de memoria como en términos de tiempo de inicialización.
Aparte de eso, no esperaría un efecto significativo en el rendimiento.
Dicho esto, no me preocuparía por el rendimiento aquí: elija el tipo que proporcione la mejor abstracción para lo que quiere hacer con esto. Si a su código no le importa qué subclase específica está usando y no necesita ninguna de las funciones proporcionadas por las subclases, use el tipo más general. De esa manera, su código sigue siendo más flexible. Sin embargo, si su código necesita dicha funcionalidad en algún momento, es decir, tiene que introducir conversiones más adelante, entonces ha ido demasiado lejos.
La respuesta es sí. Por ejemplo, si invoca el método z.someMethod(). El Hotspot buscará primero el método en la clase Z. Si HotSpot no encuentra el método de destino, buscará el método en el padre de Z. Y continúe estos pasos hasta que encuentre el método de destino. Por lo tanto, llevará más tiempo buscar el método si la cadena de herencia es larga.
Sin embargo, HotSpot usa algo de caché para acelerar el proceso.