Je me demande si j'ai inclus plusieurs import
dans mon programme Java, cela affecterait-il les performances de mon code (par exemple, le programme sera plus lent)? Est-ce que la logique derrière import
en Java est identique à include
en C?
cela affecterait-il les performances de mon code (par exemple, le programme sera plus lent)?
Non, cela n'affectera pas les performances de votre code.
La taille des fichiers binaires (les fichiers de classe) n’augmente pas car l’importation est not implémentée avec n’importe quel mécanisme couper-coller.
C'est simplement un sucre syntaxique 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 démontrant ceci:
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
(modification de 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
La logique de l'importation en Java est-elle la même que celle de l'inclusion en C?
Non, un #include
est une directive de préprocesseur et est implémenté avec un mécanisme de copier/coller.
... cela affecterait-il les performances de mon code
Pas le moins du monde. En fait, les classes compilées (en utilisant imports ou non) seront identiques. Une importation est simplement un 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, cela 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 (infime) différence dans les temps de compilation. Mais, autant que je sache, 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:
.*
) peuvent entraîner des collisions inattendues.La logique derrière l'importation en Java est-elle la même que celle incluse dans C?
Non ce n'est pas.
Une directive include C/C++ s’injecte arbitrairement1 "Code" C/C++ dans le flux 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 quel que soit le choix des auteurs du fichier include dans le fichier. Il pourrait s'agir d'une méthode et de "signatures" de classe simples, mais il pourrait également s'agir de déclarations de macro, de code et d'autres déclarations ayant un impact. Vous devez examiner le fichier pour en être sûr.
import
ne ralentit pas votre programme. Il est préférable d’avoir différents types de classes
dans différents packages
et de les importer selon les 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 deviendra pas plus lente. import est pratique, vous pouvez donc utiliser des noms plus courts.
Les classes sont chargées lorsque leur constructeur est appelé implicitement ou explicitement ( new operator). Dans le cas d'enums, ce sera lorsque vous vous référerez aux noms d'énum dans votre code. Cela provoquera le chargement de la classe (enum). (Vous pouvez essayer d'utiliser println dans le constructeur privé d'enum pour expérimenter et voir quand enum est chargé). Charger une classe prend du temps et de la mémoire. De manière générale, les classes chargées ne sont pas censées être déchargées.