Foros del Web » Programación para mayores de 30 ;) » Java »

Es más eficiente pasar instancia, o crearla en método ¿?

Estas en el tema de Es más eficiente pasar instancia, o crearla en método ¿? en el foro de Java en Foros del Web. Hola, cada vez que me veo en esta situación me pregunto lo mismo: Si estoy en un método A en el que he creado una ...
  #1 (permalink)  
Antiguo 23/01/2009, 02:28
 
Fecha de Ingreso: marzo-2007
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Es más eficiente pasar instancia, o crearla en método ¿?

Hola, cada vez que me veo en esta situación me pregunto lo mismo:

Si estoy en un método A en el que he creado una instancia de una clase, y desde este método llamo a otro método B en el que también se usa esta clase, es más eficiente hacer que uno de los parámetros de B sea dicha clase, y así sólo se creará una instancia (en A), es sería mejor volver a crear una instancia en B ¿?

Saludos
  #2 (permalink)  
Antiguo 23/01/2009, 04:53
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Es más eficiente pasar instancia, o crearla en método ¿?

Quizá si pones algo de código se entienda mejor, por que así es difícil.

De todas formas las variables han de tener el ámbito adecuado e intentar reutilizarlas fuera de él entra dentro de las "optimizaciones prematuras" que se suelen no-recomendar. El GC es lo suficientemente listo hoy en día como para librarse rápidamente de las variables que no se usan.

A no ser que estemos hablando de recursos/clases que sean costosas de instanciar, y entonces se usan pools o similares.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 23/01/2009, 05:02
 
Fecha de Ingreso: marzo-2007
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Es más eficiente pasar instancia, o crearla en método ¿?

Hola GreenEyed,

Disculpa, te pongo un ejemplo:

Sería mejor hacer algo así:

Código PHP:
    private void metodoA(){
        
// ...
        
UsersDAO usrsDao = new UsersDAO();
        
// Se hace uso de usrsDao
        // ...
        
int x metodoB();
    }

    private 
int metodoB(){
        
// ...
        
[B]UsersDAO usrsDao = new UsersDAO();[/B]
        
// Se hace uso de usrsDao
        // ...
        
return 0;
    } 
O de esta otra forma, en la que tenemos el coste de pasar un parámetro más pero se ahorra una instancia de UsersDAO

Código PHP:
    private void metodoA(){
        
// ...
        
UsersDAO usrsDao = new UsersDAO();
        
// Se hace uso de usrsDao
        // ...
        
int x metodoB(usrsDao);
    }

    private 
int metodoB([B]UsersDAO usrsDao[/B]){
        
// ...
        // Se hace uso de usrsDao
        // ...
        
return 0;
    } 
Saludos
  #4 (permalink)  
Antiguo 23/01/2009, 05:07
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Es más eficiente pasar instancia, o crearla en método ¿?

¿Qué es lo que quieres usar en B? Quieres usar un método de la clase que no tiene nada que ver con ninguna instancia? Quieres ejecutar un método justo sobre la instancia que tienes en A? Quieres ejecutar un método sobre otra instancia distinta a la que se crea en A?

Son conceptos que van un poco más allá de lo que sea más eficiente. Se trata de lo que necesitas hacer o no. A lo mejor lo que necesitas es que el método sea estático y que no vaya asociado a ninguna instancia en particular. O que realmente sólo se pueda instanciar un objeto de esa clase en toda la aplicación.

Es decir, ese "Se hace uso de usrsDao" qué quiere decir, qué uso se hace de él?
  #5 (permalink)  
Antiguo 23/01/2009, 05:25
 
Fecha de Ingreso: marzo-2007
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Es más eficiente pasar instancia, o crearla en método ¿?

Disculpa, la verdad es que expreso mis ideas bastante mal... :( Los métodos de UsrsDao no dependen de cada instancia. Concretanemte en este caso, es un DAO típico, se usará para guardar algo por ejemplo.

Pongo otro ejemplo a ver si me aclaro un poco, en el primer caso, se llamará dos veces al método getNombres, que en ambos casos devolverá lo mismo. En el segundo caso, la llamada al metodoB será más costosa, pues lleva un parámetro más, pero se ahorra una llamada al método getNombres

Código PHP:
    private void metodoA(){
        
// ...
        
List<Stringlistado getNombres();
        
// Se hace uso de listado
        // ...
        
int x metodoB();
    }

    
/**
     * Obtiene el número de personas, de todas las registradas en el sistema, 
     * cuyo nombre empieze por A
     * @return
     */
    
private int metodoB(){
        
int total 0;
        
// ...
         
List<Stringlistado getNombres();
        
// Se hace uso de listado
        // ...
        
return total;
    }

    
/**
     * Obtiene un listado con los nombres de todas las personas registradas en
     * el sistema
     * @return
     */
    
private  List<StringgetNombres(){
        
// ...
    

La otra opción

Código PHP:
    private void metodoA(){
        
// ...
        
List<Stringlistado getNombres();
        
// Se hace uso de listado
        // ...
        
int x metodoB(listado);
    }

    
/**
     * Obtiene el número de personas, de todas las registradas en el sistema, 
     * cuyo nombre empieze por A
     */
    
private int metodoB(List<Stringlistado){
        
int total 0;
        
// ...
        // Se hace uso de listado
        // ...
        
return total;
    }

    
/**
     * Obtiene un listado con los nombres de todas las personas registradas en
     * el sistema
     */
    
private  List<StringgetNombres(){
        
// ...
    

Nuevamente, el ejemplo no es muy bueno, pero más o menos refleja mi duda.
  #6 (permalink)  
Antiguo 23/01/2009, 05:56
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Es más eficiente pasar instancia, o crearla en método ¿?

Uhm, ese ejemplo es bastante distinto de lo que decías antes.

Quiero decir, no estás instanciando un objeto, lo que estás haciendo es crear N objetos probablemente leyendo los datos de un fichero, o de base de datos o de algún lado, y creando un List y metiendolos en él. Sólo escribiendolo ya se ve como una operación costosa, ¿no?
  #7 (permalink)  
Antiguo 23/01/2009, 06:06
 
Fecha de Ingreso: marzo-2007
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Es más eficiente pasar instancia, o crearla en método ¿?

Bueno... no tan distintos. Todo depende de lo "pesado" que sea el objeto instanciado, o de lo costoso que sea generar el listado. La duda en ambos casos es la misma, añadir un parámetro más al método puede compensar ¿? Supongo que teniendo un parámetro más su llamada será más "costosa" en cuanto a memoria y tiempo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:41.