Importation Java vs performances du code

Je me demande si j’ai inclus beaucoup d’ import dans mon programme Java, cela affecterait-il les performances de mon code (par exemple, le programme sera plus lent)? La logique de l’ import dans Java est-elle la même que celle include dans C?

cela affecterait-il les performances de mon code (par exemple, le programme sera plus lent)?

Non, cela n’affecterait pas les performances de votre code.

Les fichiers binarys (les fichiers de classe) n’augmentent pas en taille car l’importation n’est pas implémentée avec un mécanisme de copier-coller.

C’est simplement un sucre syntaxique pour éviter d’avoir à écrire par exemple

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

Voici un petit test démontrant ceci:

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

(modification de Test.java )

 aioobe@e6510:~/tmp$ cat Test.java public class Test { public static void main(Ssortingng[] 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 logique de l’importation dans Java est-elle la même que celle incluse dans C?

Non, un #include est une directive de préprocesseur et est implémenté avec un mécanisme de copier-coller.

… cela affecterait-il la performance de mon code

Pas du tout. En fait, les classes compilées (utilisant des importations ou non) seront identiques. Une importation est simplement du sucre syntaxique qui vous permet d’utiliser un nom plus court pour une classe externe ou un membre de classe (avec une importation statique) dans votre code source. En d’autres termes, il vous permet d’écrire:

  Map map = new HashMap(); 

au lieu de

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

C’est tout.

Il y a potentiellement une petite différence dans les temps de compilation. Mais, AFAIK, quelque chose comme import java.util.*; NE provoque PAS le chargement de toutes les classes java.util par le compilateur. Au lieu de cela, il ajoute simplement les noms des classes à la table des symboles.

Ayant dit cela:

  • Les importations inutiles sont une mauvaise idée, car elles encombrent le code et pourraient induire en erreur quelqu’un qui lit le code.
  • Les importations de caractères génériques ( .* ) Peuvent entraîner des collisions inattendues.
  • Beaucoup de gens (y compris moi-même) n’aiment pas les importations de caractères génériques, car ils préfèrent voir une liste des classes utilisées.

La logique de l’importation dans Java est-elle la même que celle incluse dans C?

Non ce n’est pas.

La directive AC / C ++ include injecte un “code” C / C ++ arbitraire dans le stream source. Cela peut inclure des déclarations et des instructions exécutables … qui peuvent affecter à la fois les performances, l’encombrement de la mémoire d’exécution et la taille de l’exécutable.


1 – C’est-à-dire quels que soient les auteurs du fichier d’inclusion choisis dans le fichier. Cela pourrait être une méthode simple et des “signatures” de classe, mais il pourrait également s’agir de macro, de code et d’autres déclarations ayant un impact. Vous devez examiner le fichier pour être sûr.

Cela n’aura aucun impact sur la vitesse d’ exécution de votre programme.

Cela peut avoir un impact sur la vitesse de compilation de votre programme.

Si vous import java.util.*; Il va charger tout le paquet java.util dans le compilateur, ce qui peut augmenter le temps de compilation lorsque vous .* un paquet entier pour une utilisation unique (bien que vous deviez effectuer un profilage si cela posait problème).

Outre les problèmes potentiels de compilation, n’oubliez pas de prendre en compte les problèmes de lisibilité. Généralement, je (et les personnes avec qui j’ai parlé) trouve import pack.age.Class; être plus lisible que le import pack.age.*; – Discutez bien sûr avec votre équipe avant de prendre une décision à ce sujet.

Mais la logique derrière elle est très différente de #include et ne bloque pas le code. Vous pouvez vous retrouver avec plus que nécessaire car vous incluez des jars de dépendance, mais ce n’est probablement pas un gros problème.

import ne ralentit pas votre programme. Il est préférable d’avoir différents types de classes dans des packages différents et de les importer selon vos besoins. Améliore la lisibilité du code.

L’importation n’est pas un problème. Vous pouvez importer tout ce que vous voulez du paquet et l’exécution de votre code ne sera pas plus lente. importation est pratique pour que vous puissiez utiliser des noms plus courts.

Les classes sont chargées lorsque leur constructeur est appelé implicitement ou explicitement ( nouvel opérateur). Dans le cas des énumérations, ce sera quand vous vous référez aux noms de énumération dans votre code. Cela provoquera le chargement de la classe (enum). (Vous pouvez essayer d’utiliser println en constructeur privé d’énum pour expérimenter et voir quand enum est chargé). Le chargement d’une classe prend du temps et de la mémoire. De manière générale, les classes chargées ne sont pas destinées à être déchargées.