46 votes

Importation Java vs performances du code

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?

68voto

aioobe Points 158466

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.

22voto

Stephen C Points 255558

... 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 la java.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.

13voto

corsiKa Points 39442

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.

2voto

fastcodejava Points 22174

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 au besoin. Améliore la lisibilité du code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X