Je me demande si j'ai inclus de nombreux import
dans mon programme java, cela affecterait-il les performances de mon code (par exemple, le programme sera plus lent)? La logique derrière import
en Java est-elle la même que include
en C?
Réponses
Trop de publicités?serait-il affecter les performances de mon code (par exemple, le programme sera plus lent)?
Non, il ne serait pas affecter les performances de votre code.
Les fichiers binaires (les fichiers de classe) n'augmente pas la taille que l'importation est pas mis en œuvre avec toute les couper et coller mécanisme.
Il s'agit simplement d'un syntacting de sucre pour éviter d'avoir à écrire par exemple
java.util.List<java.math.BigInteger> myList = new java.util.ArrayList<java.math.BigInteger>();
Voici un petit test de le démontrer:
aioobe@e6510:~/tmp$ cat Test.java import java.util.*; public class Test { public static void main(String[] args) { List<Integer> myInts = new ArrayList<Integer>(); } } aioobe@e6510:~/tmp$ javac Test.java aioobe@e6510:~/tmp$ md5sum Test.class 523036e294b17377b4078ea1cb8e7940 Test.class
(modifiant l'
Test.java
)aioobe@e6510:~/tmp$ cat Test.java public class Test { public static void main(String[] args) { java.util.List<Integer> myInts = new java.util.ArrayList<Integer>(); } } aioobe@e6510:~/tmp$ javac Test.java aioobe@e6510:~/tmp$ md5sum Test.class 523036e294b17377b4078ea1cb8e7940 Test.class
Est la logique derrière l'import Java de la même façon que d'inclure dans C?
Non, un
#include
est une directive de préprocesseur et est mis en œuvre avec un copier-coller mécanisme.
... serait-il affecter les performances de mon code
Pas le moins du monde. En fait, les classes compilées (à l'aide d'importations ou pas) sera identique. Une importation est simplement du sucre syntaxique qui permet d'utiliser un nom plus court pour une classe externe ou (avec un statique à l'importation) membre de la classe 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 (toute petite) différence dans les temps de compilation. Mais, autant que je sache, quelque chose comme
import java.util.*;
ne provoque PAS tous les de lajava.util
classes pour être chargé par le compilateur. Plutôt, il ajoute simplement les noms des classes à la table des symboles.Après avoir dit cela:
- Inutile importations sont une mauvaise idée, car ils encombrent le code et pourrait induire en erreur quelqu'un de lire le code.
- Générique importations (
.*
) peut aboutir à des collisions.- Beaucoup de gens (moi y compris) l'aversion générique importations parce qu'ils préfèrent voir la liste des classes utilisées.
Est la logique derrière l'import Java de la même façon que d'inclure dans C?
Non, il n'est pas.
Un C / C++ inclure injecte de l'arbitraire C / C++ "code" dans le cours d'eau de source. Cela peut inclure des déclarations et d'instructions exécutables ... qui peut affecter la performance, de l'exécution de la mémoire et de la taille de l'exécutable.
Il n'aura pas d'impact sur l' ~courir~temps de la vitesse de votre programme.
Il peut avoir un impact sur l' ~compiler~temps de la vitesse de votre programme.
Si vous import java.util.*;
il va charger toutes les java.util paquet dans le compilateur, ce qui peut augmenter le temps de compilation lorsque vous .*
un package complet pour une seule utilisation (même si vous devez effectuer un certain profilage si ça va être un sujet de préoccupation.)
En plus du potentiel de la compilation des questions, ne pas oublier de tenir compte de la lisibilité des enjeux. Généralement, je (et les gens à qui j'ai parlé avec) trouvez - import pack.age.Class;
pour être plus lisible qu' import pack.age.*;
- avoir une conversation avec votre équipe, bien entendu, avant de prendre une décision à ce sujet.
Mais la logique derrière cela est très différent de #include
et de ne pas gonfler le code. Vous pouvez vous retrouver avec plus que nécessaire tant que vous incluez la dépendance des pots, mais ce n'est probablement pas un gros problème.