2011-07-29 20 views
21

Digamos, por ejemplo, que tengo una clase A que crea una instancia de un objeto bastante grande B. ¿Pasa B como parámetro a un método en una clase C ineficaz?

Es decir, ¿pasa una referencia o también cambia la memoria del objeto?¿Es ineficiente pasar objetos grandes como parámetros en Java?

Gracias.

+2

pregunta brillante. Estaba a punto de preguntar lo mismo y es bueno ver las respuestas :) Tenía miedo de pasar todos mis objetos en los parámetros cuando quería algunas piezas. Es bueno ver que solo son referencias –

+0

Todas las variables son primitivas (hasta 8 bytes) o referencias (también hasta 8 bytes) Por lo que no es posible pasar más de 8 argumentos de bytes a un método, y esto no tener un impacto en el rendimiento –

Respuesta

47

Acaba de pasar una referencia. Es importante comprender que el valor de cualquier expresión en Java es nunca un objeto. Solo es siempre una referencia o un valor primitivo.

Esto no es sólo relevante para el paso de parámetros - es importante entender para los tipos de retorno, matrices, etc. asignación simple

+0

Muchas veces tus respuestas me han ayudado. Lamentablemente, solo hay 1 más por publicación. ¿Hay alguna sugerencia de Jon Skeet sobre cómo ser programador como Jon Skeet? – Tarek

6

No es ineficiente, porque solo se pasa la referencia del objeto al método.

1

Es sólo tiene que pasar una referencia como valor.

10

Java puede pasar solamente dos tipos de valores a un método:

  • valores primitivos (int, char, double, ...) o
  • referencias a objetos

No hay forma en que puede pasar un objeto entero "por valor".

Esto significa que no tiene que preocuparse acerca de "qué tan grande" es su objeto que "da vueltas".

1

Java pasa las referencias a los objetos por el valor. No importa en función del rendimiento si la referencia del objeto que se pasa a C es grande o no.

2

No hay nada como memoria Shifting ... simplemente pasa la referencia real ... y la palabra de referencia en sí misma significa alguna dirección ... así que no hay problema ... es eficiente que pasa el parámetro que realmente hace que el código sea más complejo. sea ​​por eso que SUN lo agregó a java ...

2

Como han dicho otros, en Java solo tiene un valor porcentual. Estos valores son solo primitivos y referencias. La primitiva o referencia más grande puede ser de 8 bytes. En mi humilde opinión, no hay tal cosa como un gran argumento.

4

Siempre que sus llamadas sean locales (el mismo tamaño de objeto JVM) no debería importar; sin embargo, cuando su aplicación utiliza llamadas remotas como RMI/Web Service (en JVM) los objetos grandes pueden ralentizar su aplicación a un gran medida debido a la gran cantidad de datos que se ordenarán/desorganizarán y la latencia de la red implicada para cada llamada remota.

Cuestiones relacionadas