¿Hay alguna diferencia en la eficiencia entre acceder a un objeto o crear un objeto referenciado?

¿Hay alguna diferencia en la eficiencia entre los 2 fragmentos de código a continuación? ¿El primero requiere que asigne memoria para el objeto?

Class c = a.getClass();
if(str != null)
    c.dosomething(c.getX())

if(a.getClass() != null)
    a.getClass().doSomething(a.getClass().getX());
Respuesta 1

El primero será mucho más eficiente, especialmente si el método getObject es costoso. Si se asigna memoria para c, esto se hace dentro del método getObject.

Respuesta: 2

Lo que es más eficiente realmente depende de lo que hagan el compilador JIT y la JVM cuando ejecute el código. Dado que estos dependen de la plataforma y la implementación, es difícil dar una respuesta definitiva.

Cualquier memoria asignada para el objeto de clase c debe asignarse en el getClass()método. c en su función es solo una referencia y probablemente se almacena dentro de un registro, por lo que se necesitará la asignación de memoria. Las llamadas a funciones son relativamente caras en comparación con el almacenamiento de datos dentro de un registro. Sin embargo, dudo que JIT sea lo suficientemente inteligente como para refactorizar el bytecode para su segundo fragmento en el primer fragmento, por lo que el primer método probablemente será más rápido.

Sin embargo, por el estilo del código, siempre debe ir con el primer método.

Respuesta: 3

Parece que puedo guardar algunas preferencias de usuario usando java.util.prefs.Preferences. Las preferencias están vinculadas a las clases específicas: obtengo una instancia de Preferencias al pasar un objeto de clase a ...

Tengo un problema con el subinforme utilizando javaflow con Jasperreport 6.7.0 de acuerdo con la Guía definitiva de JasperReports - Teodor Danciu, Lucian Chirita, página 130. Lo necesito para evitar diferentes ...

Los JSP / servlets son algo que me gustaría aprender, así que me puse a crear mi primera aplicación tomcat. He seguido el tutorial de apache aquí y he progresado para intentar instalar mi aplicación ...

Estoy tratando de convertir un mapa en un mapa de valores múltiples, pero obtengo la siguiente excepción de compilación: 1er tipo de argumento incorrecto. Encontrado: java.util.Map <java.lang.String, java.util.List <java.lang ....