2013-08-09 5 views
25

Ist ein nicht verwendeter Import wie folgt - importieren android.widget.RelativeLayout; essen Speicher? Willst du nur wissen, wie viel oder nur ist es wertvoll? Vielleicht ist das eine blöde Frage, aber ich habe keine Antwort gefunden.Speichert eine nicht verwendete Importdeklaration Speicher in Java?

+0

Mögliche Duplikat von [Enthält nicht genutzten Ein- und Objekte haben eine Auswirkung auf die Leistung] (http://stackoverflow.com/questions/8724045/does-unused-import-and -objects-have-an-performance-impact) – jonayreyes

Antwort

45

Nein, sie nehmen keinen Speicher. Importe werden nur vom Compiler verwendet, um Klassennamen zur Kompilierungszeit aufzulösen.

Der Compiler ändert jeden Klassennamen in einen vollständig qualifizierten Namen. Und entfernt die Importanweisung. Also, die Import-Anweisung macht es nicht zu Byte-Code.

Das einzige Problem, das beim Platzieren von Platzhaltern auftreten kann, ist Namensraumkonflikt, d. H. Wenn zwei Typen mit demselben Namen in zwei verschiedenen Paketen definiert sind, führt der Import dieser Pakete mit Platzhaltern zu Namenskonflikten für diesen Typ. mit javap Befehl


zu sehen, wie Compiler die Import-Anweisung ersetzt, können Sie den Byte-Code Ihrer Klasse generieren. Betrachten Sie den folgenden Code:

import java.util.*; 
import java.util.regex.*; 

public class Test { 
    public static void main(String[] args) { 

    } 
} 

einfach den obigen Code kompilieren, und prüfen Sie den Byte-Code mit dem folgenden Befehl:

javap Test 

Es gibt aus folgenden Ausgabe:

public class Test { 
    public Test(); 
    public static void main(java.lang.String[]); 
} 

So, Sie können sehen, dass String Typ mit seinem voll qualifizierten Namen java.lang.String ersetzt wird, und es gibt keine Import-Anweisung in Byte-Code.

+0

Vielen Dank, Sir! –

+0

Diese Antwort macht für mich Sinn, aber ich habe Probleme in meinem Java-Projekt gehabt, die dem zu widersprechen scheinen. Ich kann eine Klasse kompilieren, ein Programm ausführen, das einige Importe und ihre Referenzen verschleiern kann, damit es mit einem anderen verschleierten Code funktioniert, dann diese Klasse dekompilieren und einige Importanweisungen für die alten, jetzt verschleierten Klassen sehen. Wenn diese Klassen nie mehr im Code verwendet werden, wie erhält der Decompiler diese Importanweisungen? Sollten sie nicht in der Zusammenstellung verloren gegangen sein? (Soll ich das als neue Frage posten?) – Variadicism

+0

Macht nichts. Vergiss es. Ich glaube, der Rebuscator macht nur einen halben Job. Ich glaube, deshalb sind die Importaussagen immer noch da. Der Decompiler schreibt wahrscheinlich in diese Importanweisungen nur, um es schöner zu machen. – Variadicism

1

Nicht verwendete Importe haben keine Auswirkungen zur Laufzeit (weil im Byte-Code keine Importe enthalten sind). Nicht verwendete Importe beeinflussen jedoch den Compiler, aber nicht viel.

Im Allgemeinen führt das Importieren von nur dem, was Sie benötigen, zu verbesserter Wartbarkeit und Lesbarkeit des Codes.

11

Nein, der Compiler entfernt sie nach der Kompilierung. Aber zwei Problem kann man

  1. Code Krempel
  2. Gesicht Wenn Sie einige Klassen aus Glas importieren und später entfernt jar aber nicht Importen, dann können Sie Zeitfehler
2

keine Auswirkung zur Laufzeit erhalten kompilieren. Es kann den Kompilierungsvorgang ein sehr kleines Bit (nicht messbar) langsamer machen. Aber so weit wie sie zu haben, ist es besser, sie zu entfernen, weil es die Dateien kleiner macht und es einfacher zu lesen, welche Importe tatsächlich verwendet werden.

+0

+1 für den selbst dokumentierenden Aspekt. Das war immer der Hauptgrund für explizite Importe von nur Klassen, die verwendet werden. –

0

Keine Auswirkung jeder rumtime-Compiler Zeit,

aber beste Ansatz ist die klarste und einfachste Code möglich zu schreiben, da dies die Wartbarkeit des Codes verbessert und hilft sicherzustellen, es recht gut, auch wenn er ausführt, ist geändert.

Dokumentation: Best Practices for Performance

Verwandte Themen