Czy nieużywany import, taki jak ten - importuje android.widget.RelativeLayout; jeść pamięć? Chcesz tylko wiedzieć, ile to kosztuje? Może to głupie pytanie, ale nie znalazłem odpowiedzi.Czy nieużywana deklaracja importu je pamięci w języku Java?
Odpowiedz
Nie biorą żadnej pamięci. Importowane pliki są używane przez kompilator do rozpoznawania nazw klas podczas kompilacji.
Kompilator zmienia nazwę każdej klasy na pełną nazwę. I usuwa instrukcję importu. Tak więc instrukcja importu nie przechodzi do kodu bajtowego.
Jedynym problemem, który może wystąpić w przypadku importu za pomocą symboli wieloznacznych, jest konflikt przestrzeni nazw, tj. Gdy dwa typy o tej samej nazwie są zdefiniowane w dwóch różnych pakietach, wówczas zaimportowanie tych pakietów za pomocą symboli wieloznacznych spowoduje konflikt nazw dla tego typu.
Aby zobaczyć, jak kompilator zastępuje instrukcji import, można wygenerować kod bajtowy swojej klasie przy użyciu polecenia javap
. Rozważmy poniższy kod:
import java.util.*;
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
}
}
prostu skompilować powyższy kod i sprawdzić kod bajtowy za pomocą następującego polecenia:
javap Test
daje się następujący wynik:
public class Test {
public Test();
public static void main(java.lang.String[]);
}
Więc, możesz zobaczyć, że typ String
jest zastąpiony jego pełną nazwą java.lang.String
, a nie ma instrukcji importu w kodzie bajtowym.
Dziękuję, proszę pana! –
Ta odpowiedź ma sens, ale miałem problemy w moim projekcie Java, które wydają się temu zaprzeczać. Mogę skompilować klasę, uruchomić program, który może zaciemnić niektóre importy i ich odniesienia, aby działał z jakimś innym zaciemnionym kodem, następnie dekompilować tę klasę i zobaczyć niektóre instrukcje importu dla starych, teraz zaciemnionych klas. Jeśli te klasy nigdy nie są używane w kodzie, w jaki sposób dekompiler pobiera te instrukcje importu? Czy nie powinni byli zgubić się w kompilacji? (Czy powinienem to opublikować jako nowe pytanie?) – Variadicism
Nieważne. Zapomnij o tym. Wierzę, że reobfuscator po prostu robi pół-pracy. Uważam, że dlatego oświadczenia dotyczące importu nadal istnieją. Dekompilator prawdopodobnie pisze w tych instrukcjach importu tylko po to, by wyglądał ładniej. – Variadicism
Niewykorzystane importu nie mają wpływu w czasie wykonywania (ponieważ nie ma przywozu w kodzie bajtowym). Jednak nieużywany import wpłynie na kompilator, ale nie za dużo.
Ogólnie rzecz biorąc, importowanie tylko tego, czego potrzebujesz, prowadzi do poprawy łatwości konserwacji i czytelności kodu.
Nie, kompilator usuwa je po kompilacji. Ale dwa kwestia może napotkać
- Kod bałaganu
- W przypadku importowania niektórych klas z słoik i później usunięte słoik, ale nie importu, wtedy może pojawić się błąd kompilacji czas
żadnego wpływu na starcie. Dzięki temu proces kompilacji może być bardzo mały (wolniejszy) niż wolniej. Ale jeśli chodzi o ich posiadanie, lepiej je usunąć, ponieważ powoduje to, że pliki są mniejsze i ułatwia to odczytanie, jakiego importu rzeczywiście używa.
+1 dla aspektu dokumentowania samego siebie. To zawsze był mój główny powód wyraźnego importu tylko tych klas, które są używane. –
Brak wpływu dowolny czas rumtime kompilator,
ale najlepszym rozwiązaniem jest napisanie najczystszy i najprostszy kod można jak to poprawia konserwacji kodu oraz pomaga zapewnić wykonuje dość dobrze nawet po to zmienione.
Dokumentacja: Best Practices for Performance
- 1. Jak analizować fragmentację pamięci w języku Java?
- 2. Co oznacza ta deklaracja klasy w języku Java?
- 3. Niektóre ostrzeżenia w języku Java 7 - jak je usunąć
- 4. Deklaracja dynamicznej macierzy w java
- 5. Alias importu pakietu Java
- 6. Ogólna deklaracja funkcji w języku C#
- 7. Klasa importu Java System
- 8. Inicjalizacja/deklaracja atrybutów w klasie Pythona: gdzie je umieścić?
- 9. Schemat importu i eksportu w języku kassandra
- 10. Wdrażanie okresowo odświeżającej pamięci podręcznej w języku Java
- 11. importu klasa skryptów Java (javax.script)
- 12. Uwalnianie pamięci w języku Python
- 13. Znaleźć zależność lub regenerację Mave z deklaracji importu w języku Java Kod
- 14. Czy można kodować java w innym języku?
- 15. Czy null jest klasą w języku Java?
- 16. Czy w języku Java istnieje odpowiednik epollu?
- 17. Czy istnieje odpowiednik frexp w języku Java?
- 18. Czy istnieje przenośny sposób kopiowania bloku pamięci w języku C#?
- 19. Struktura plików Java w pamięci?
- 20. Nieużywana zmienna ostrzeżenia w kodzie Haskella
- 21. Wyrównanie pamięci w języku C++
- 22. Dlaczego zmienna Erlang jest nieużywana?
- 23. Czy operator przypisania zużywa pamięć w języku Java?
- 24. Jak analizować negatywnie w języku Java w języku Java
- 25. Skrypt względnego importu w języku Python dwa poziomy w górę
- 26. Jak sprawdzić, czy jest to przeciek pamięci podczas wywoływania kodu macierzystego w języku Java?
- 27. Zmienna deklaracja i ich adresy pamięci w C
- 28. Klon() w języku Java
- 29. Utwórz obiekt pliku w pamięci z ciągu znaków w języku Java
- 30. Czy funkcja ma jakąś klasę pamięci w języku C?
Możliwy duplikat [Czy niewykorzystane import i obiekty mają wpływ na wydajność] (http://stackoverflow.com/questions/8724045/does-unused-import-and -obiekty mają wpływ na wydajność) – jonayreyes