Hat nicht verwendeter Import und Objekte einen Einfluss auf die Leistung?

75

Ich habe Zweifel, ob die nicht verwendeten Importe und nicht verwendeten Objekte in Java-Code Auswirkungen auf die Leistung haben.

Angenommen, ein Objekt wird initialisiert und nie verwendet. Was passiert? Und wie hoch sind die Kosten für nicht genutzte Importe?

Dheeraj Joshi
quelle
Warum nicht die Eclipse- Organize ImportsFunktion verwenden?
Jürgen d
Oder die Importe in IntelliJ oder NetBeans oder eine anständige IDE organisieren.
Peter Lawrey
1
Es gibt eine Auswirkung auf die Verwaltung des Codes sicher :)
Störung

Antworten:

69

Es ist eine sehr häufige Frage.

Wie bei den meisten Leistungsfragen besteht der beste Ansatz darin, den klarsten und einfachsten Code zu schreiben, den Sie können, da dies die Wartbarkeit des Codes verbessert und dazu beiträgt, dass er auch nach seiner Änderung eine einigermaßen gute Leistung erbringt. (Clever / Obtuse / Unnötig Ausführlicher Code kann anfangs schnell ausgeführt werden, aber da er von bloßen Sterblichen geändert wird, kann er viel langsamer werden.)

Nicht verwendete Importe haben geringfügige Auswirkungen auf den Compiler, es gibt jedoch keine Importe im Bytecode oder zur Laufzeit.

Nicht verwendete Objekte können entfernt werden, aber es ist am besten, diese zu vermeiden, da sie fast immer Leistungseinbußen verursachen, aber vor allem das Lesen und Verwalten Ihres Codes erschweren.

Peter Lawrey
quelle
1
Wir können auch einige zusätzliche CPU-Ticks im Kompilierungsprozess erwähnen. Mehr Code - mehr Zeit zum Optimieren und Kompilieren
Störung
Danke für die Antwort! Haben Sie eine Quelle für diese Informationen, auf die ich verweisen kann? (außer dieser Antwort ...)
Eduardo Bezerra
2
@EduardoBezerra Aus der Byte-Cide-Spezifikation geht hervor, dass Importe nicht verwendet werden, sodass sie sich zur Laufzeit auswirken können.
Peter Lawrey
24

Nicht verwendete Importe haben zur Laufzeit keine Auswirkungen auf die Leistung. Es ist lediglich ein Namespace-Mechanismus. Sie sollten jedoch immer nur das importieren, was Sie für die Lesbarkeit benötigen, und störende Namespace-Kollisionen vermeiden.

Abgesehen von der Lesbarkeit des Codes und damit der Wartbarkeit des Codes kann es zu einer schnelleren (jedoch nicht wahrnehmbaren) Kompilierung von Java-Code durch Aufräumen von Importen kommen, die Laufzeitleistung wird jedoch nicht beeinträchtigt, da der generierte Bytecode nicht durch unordentliche Importe beeinträchtigt wird. Der generierte Bytecode bleibt gleich.

Frankline
quelle
3
Bitte geben Sie die Referenz fürunused imports have no performance impact
RanRag
3
Genauer gesagt gibt es bei RUNTIME keine Auswirkungen auf die Leistung. Abhängig von der Anzahl der Importe kann die ZUSAMMENSTELLUNG jedoch langsamer sein, jedoch nicht bemerkt werden.
Frankline
Warum unbemerkt? Das hängt doch davon ab, wie viele Zusammenstellungen Sie machen? Zum Beispiel - wir haben einen CI-Build-Server, der kontinuierlich mehrere Projekte kompiliert - sollte daher selbst die kleinste Optimierung die Kompilierungsleistung geringfügig erhöhen, oder?
Ryan
Wenn etwas einen Tag länger dauert als gewöhnlich, werden Sie es bemerken ... vorausgesetzt, es dauert normalerweise weniger als ein paar Tage. Was ist, wenn es normalerweise ein Jahr dauert? Sie werden es nicht bemerken, weil es nur Rauschen in dieser Größenordnung ist. Es gibt lohnendere Dinge, auf die man sich konzentrieren sollte, als eine Leistungssteigerung von 0,274%. Wenn Sie wirklich eine kleine Steigerung brauchen, bessere Hardware darauf werfen oder den Compiler verbessern, werden Sie weit mehr davon haben, als nach dem Taschenwechsel.
Chinoto Vokro
@ SantiBailors "einen ganzen Tag" aus was? Dieser Tag wird vom Computer verbracht, nicht von Ihnen. Ein Computer kann keine Fehler beheben (es sei denn, er ist darauf programmiert?), Sonst würden Sie nicht benötigt. Eine Änderung, die innerhalb einer 1000-Iterationsschleife 1/1000 gewinnt, ist immer noch nur 1/1000, ich verstehe Ihren Standpunkt nicht. Wenn jemand Sie für einen so kleinen Gewinn bezahlen möchte, ist das großartig für Sie, sonst ist es Zeitverschwendung.
Chinoto Vokro
8

Während die Auswirkungen bei der Kompilierung minimal sind, können die Auswirkungen bei der Bereitstellung schlecht sein. Ich bin gerade auf einen nicht verwendeten Import gestoßen, für den eine separate Bibliothek erforderlich war, die zu einer Maven-Abhängigkeit wurde. Ein weiteres Problem mit der transitiven Abhängigkeit wurde glücklicherweise nicht gefunden, aber die .warDatei war ohne Grund dicker. Fügen Sie dazu ein überflüssiges Glas im Webapp Classloader hinzu.

Ossama Boughaba
quelle
1

Nicht verwendete Importe in Java-Dateien verursachen zwar keinen Schaden, erhöhen jedoch unnötig die Länge und Größe der Java-Quelldatei.

Asem Shawkey
quelle
0

Ja, es wirkt sich ein wenig auf die Leistung aus, wenn wir in unserer Java-Klasse auf nicht verwendete Importanweisungen verweisen. Der Java-Compiler sucht nach Referenzen, die in der import-Anweisung erwähnt werden, und wirkt sich auf Minutenebene auf die Leistung Ihrer Klasse aus.

Vielen Dank

Neeraj
quelle