Rendimiento de código de importación vs Java

Me pregunto si incluí muchas import en mi progtwig java, ¿afectaría el rendimiento de mi código (por ejemplo, el progtwig será más lento)? ¿La lógica detrás de la import en Java es la misma que se include en C?

¿afectaría el rendimiento de mi código (por ejemplo, el progtwig será más lento)?

No, no afectaría el rendimiento de tu código.

Los archivos binarios (los archivos de clase) no aumentan de tamaño ya que la importación no se implementa con ningún mecanismo de cortar y pegar.

Es simplemente un azúcar sintáctico para evitar tener que escribir, por ejemplo

 java.util.List myList = new java.util.ArrayList(); 

Aquí hay una pequeña prueba que demuestra esto:

 aioobe@e6510:~/tmp$ cat Test.java import java.util.*; public class Test { public static void main(String[] args) { List myInts = new ArrayList(); } } aioobe@e6510:~/tmp$ javac Test.java aioobe@e6510:~/tmp$ md5sum Test.class 523036e294b17377b4078ea1cb8e7940 Test.class 

(modificando Test.java )

 aioobe@e6510:~/tmp$ cat Test.java public class Test { public static void main(String[] args) { java.util.List myInts = new java.util.ArrayList(); } } aioobe@e6510:~/tmp$ javac Test.java aioobe@e6510:~/tmp$ md5sum Test.class 523036e294b17377b4078ea1cb8e7940 Test.class 

¿La lógica detrás de la importación en Java es la misma que se incluye en C?

No, un #include es una directiva de preprocesador y se implementa con un mecanismo de cortar y pegar.

… afectaría el rendimiento de mi código

En lo mas minimo. De hecho, las clases comstackdas (usando importaciones o no) serán idénticas. Una importación es simplemente azúcar sintáctica que le permite usar un nombre más corto para una clase externa o (con una importación estática) miembro de la clase en su código fuente. En otras palabras, te permite escribir:

  Map map = new HashMap(); 

en lugar de

  java.util.Map map = new java.util.HashMap(); 

Eso es todo.

Existe una diferencia potencialmente pequeña (pequeña) en los tiempos de comstackción. Pero, AFAIK, algo así como import java.util.*; NO provoca que todas las clases java.util sean cargadas por el comstackdor. Más bien solo agrega los nombres de las clases a la tabla de símbolos.

Una vez dicho esto:

  • Las importaciones innecesarias son una mala idea, porque desordenan el código y pueden confundir a alguien que lee el código.
  • Las importaciones de comodines ( .* ) Pueden provocar colisiones inesperadas.
  • A muchas personas (yo incluido) no les gustan las importaciones de comodines porque prefieren ver una lista de las clases reales utilizadas.

¿La lógica detrás de la importación en Java es la misma que se incluye en C?

No, no es.

La directiva de inclusión de AC / C ++ inyecta un “código” 1 C / C ++ arbitrario en la secuencia fuente. Esto puede incluir declaraciones y sentencias ejecutables … que pueden afectar tanto el rendimiento, la huella de la memoria de ejecución y el tamaño del ejecutable.


1 – Es decir, lo que sea que los autores del archivo de inclusión elijan poner en el archivo. Podría ser un simple método y clase de “firmas”, pero también podría ser macro, código y otras declaraciones que son impactantes. Tienes que examinar el archivo para estar seguro.

No tendrá ningún impacto en la velocidad de ejecución de su progtwig.

Puede tener un impacto en la velocidad de comstackción de su progtwig.

Si import java.util.*; cargará todo el paquete java.util en el comstackdor, lo que puede boost el tiempo de comstackción cuando usted .* un paquete completo para un solo uso (aunque debe realizar algunos perfiles si va a ser una preocupación).

Además de los posibles problemas de tiempo de comstackción, no olvide considerar los problemas de legibilidad. En general, yo (y la gente con la que he hablado) encuentro import pack.age.Class; ser más legible que import pack.age.*; – tenga una charla con su equipo por supuesto antes de tomar una decisión al respecto.

Pero la lógica detrás de esto es muy diferente de #include y no hincha el código. Puede terminar con más de lo necesario al incluir tarros de dependencia, pero probablemente no sea un gran problema.

import no ralentiza su progtwig. Es mejor tener diferentes clases de classes en diferentes packages e importarlas según sea necesario. Mejora la legibilidad del código.

La importación no es un problema. Puede importar todo lo que desee del paquete y la ejecución de su código no será más lenta. la importación es por conveniencia, por lo que puede usar nombres más cortos.

Las clases se cargan cuando su constructor se llama implícita o explícitamente ( nuevo operador). En el caso de las enumeraciones, será cuando hagas referencia a nombres enum en tu código. Esto hará que se cargue la clase (enum). (Puede intentar usar println en el constructor privado de enum para experimentar y ver cuándo enum se carga). Cargar una clase requiere tiempo y memoria. En general, las clases cargadas no están destinadas a ser descargadas.