import .; - Speicherauslastung, Performance

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
was ist besser zu nutzen i.S.v. Speicherauslastung, Performance etc.?

z.B.:

Code:
import java.awt.Color; 
... 

Color color=new Color();
oder
Code:
... 
java.awt.Color color=new java.awt.Color();
 
S

SlaterB

Gast
boah, du machst dir ja Gedanken,
ich kanns nicht sagen, aber dir versichern, dass andere Faktoren 99,99999% der Performance und des Speichers benötigen werden
 
G

Guest

Gast
naja ok

hier ein anderes Beispiel:

Code:
java.sql.Date d=null;
java.util.Date utildate=sdf.parse(complicationDate); 
d=new java.sql.Date(utildate.getTime());;
 
S

SlaterB

Gast
das Parsen und das Erzeugen von Objekten sind wieder Dinge, die real Zeit kosten und zwar 99... mehr als was immer du dir beim Import überlegst,

oder fragst du nun was anderes?
 
G

Gast

Gast
nein,nein
das Beispiel sollte nur veranschaulichen, dass

import java.sql.Date;
import java.util.Date;

wohl nicht funktionieren.

Das betrifft wohl auch einige andere z.B. java.util.Hashtable und
com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable zu.

Ehe ich alle import ... 'einfach' mal ersetze, wollte ich ne Meinung zu Vor- /Nachteilen einholen.
 
S

SlaterB

Gast
ja, das stimmt, doppelte Klassennamen sind nervig, für die Performanz im Code schreiben + lesen tatsächlich relevant ;)

aufs Programm hat das aber letztlich keine Auswirkung, so viel steht fest
 

Wolfram

Mitglied
Hi,

Du bist Dir nicht klar über die Funktion des import-statements.

Um die schon genannten Punkte noch mal anders zu formulieren, das import-statement bindet lediglich einen oder mehrere Namen aus einem Paket in den aktuellen Namensraum ein, damit man weniger tippen muss. Es hat aber sonst keine Funktion.

Im Prinzip kann man Java ganz ohne import-Statements programmieren, man muss dann nur allen Namen den vollständigen Paketpfad voranstellen, also z.B. java.util.List statt einfach List verwenden. Die Klasse java.util.List wird durch das import-statement unter dem Namen "List" verfügbar gemacht, und es ist nur als Hilfe für den Programmierer gedacht.

Im compilierten Programm steht aber immer java.util.List.

Da es sich dabei nur um eine Tipphilfe handelt, soll per Definition kein Unterschied bestehen. Gäbe es einen, wäre es ja mehr als eine Tipphilfe. :)
 

FArt

Top Contributor
Du bist Dir nicht klar über die Funktion des import-statements.
Dito ;-)
das import-statement bindet lediglich einen oder mehrere Namen aus einem Paket in den aktuellen Namensraum ein, damit man weniger tippen muss
Nein.
Im Prinzip kann man Java ganz ohne import-Statements programmieren, man muss dann nur allen Namen den vollständigen Paketpfad voranstellen
Ja.
Im compilierten Programm steht aber immer java.util.List.
Nein.
Da es sich dabei nur um eine Tipphilfe handelt, soll per Definition kein Unterschied bestehen. Gäbe es einen, wäre es ja mehr als eine Tipphilfe
Nein, ja.

Alle Klassen, die im Import von Klasse A aufgeführt sind, werden in dem Moment vom Classloader geladen, in dem die Klasse A geladen wird. Zum laden der Klasse gehört auch, dass die statischen Felder initialisiert werden und der static initializer aufgerufen wird (das ist im kompilierten Code übrigens wirklich das selbe, denn die Initialisierung von statischen Feldern wird in einen static initializer umgesetzt).

Wenn also viele Klassen geladen werden (die u.U. nicht benötigt werden, weil der Code nicht angesprungen wird) und die initialisierung länger dauert, hat man sowohl einen Performancenachteil, als auch eine höhere Last im PermSpeicher, u.U. auch im Heap.

Diese Factorymethode ist also sinnvoll:
Code:
  public static CallerIF newCaller() {
    if (isInServer) {
      return new myServerPackage.CallerImpl();
    } else {
      return new myClientPackage.CallerStub();
    }
  }

Auf dem Server muss die Klasse CallerStub nicht vorhanden sein, auf dem Client muss CallerImpl nicht vorhanden sein. Würden die Klassen im Import stehen, gäbe es jeweils eine ClassNotFoundException bzw. ich müsste beide Implementierungen ausliefern, obwohl sie dort nie benötigt werden.

[EDIT]
Ob das bedeutet, dass myPackage.* alle Klassen dieses Packages lädt, weiß ich nicht, würde ich aber vermuten.

ACHTUNG:
Wer jetzt blind loslegt und alle Imports rausschmeißt, hat nicht verstanden wann was optimiert werden muss.

Die Regeln des Optimierens:
- optimiere spät
- optimiere spät
- optimiere spät
- optimiere nur wenn nötig, nicht auf Verdacht
- bevor du optimierst, identifiziere die Bottlenecks bzw. Speicherprobleme
- optimiere nur, wen du signifikante Verbesserungen erzielen kannst
 
S

SlaterB

Gast
> Alle Klassen, die im Import von Klasse A aufgeführt sind, werden in dem Moment vom Classloader geladen, in dem die Klasse A geladen wird.

hmm, gleich mal ein Test:
Code:
package test;

import test2.*;

public class Test
{

    public static void main(String[] args)
    {
//        new Test3();
        System.out.println("Ende");
    }
}

--------------

package test2;

public class Test3
{
    static
    {
        System.out.println("Hi");

    }
}
bei mir erscheint nur die Ausgabe 'Ende',
ist der new-Aufruf dagegen nicht auskommentiert, dann wird auch 'Hi' ausgegeben,
wird vielleicht doch optimiert?
 

Wolfram

Mitglied
Hi FArt,

über die Funktion des import-statements habe ich schnell mal in der Spezifikation quergelesen. Zum Thema Einbindung von Namen in den Namensraum steht dort:

[zitat]
An import declaration allows a static member or a named type to be referred to by a simple name (§6.2) that consists of a single identifier.
[/zitat]

Also: Eine import-Deklaration erlaubt es, statische "member" oder einen "named type" unter einem einfachen Namen anzusprechen, der aus einem einzelnen "identifier" besteht. Das deckt sich glaub ich grad eben noch mit meiner Behauptung, obwohl import natürlich eine Deklaration ist, und kein Statement, wie ich gesagt hatte. ;)

Ein Kompilat kann man sich einfach ansehen, z.B. die .class-Dateien einfach im Editor aufmachen. Es stehen dort tatsächlich die kompletten Pfadnamen drin (mit '/' anstelle von '.'). Ich habe außerdem spaßeshalber ein kleines Progrämmchen einmal mit, einmal ohne imports kompiliert, also mit absoluten Pfaden. Die entstehenden .class-Dateien sind genau gleich.

Code:
package javaapplication3;

import java.util.LinkedList;

public class Main {

    public static void main(String[] args) {
        LinkedList<Integer> ll = new LinkedList<Integer>();
        ll.add(1);
        System.out.println("" + ll.get(0));
    }
}

Und (auskommentiert, um die Zeilenanzahl nicht zu ändern):

Code:
package javaapplication3;

//import java.util.LinkedList;

public class Main {

    public static void main(String[] args) {
        java.util.LinkedList<Integer> ll = new java.util.LinkedList<Integer>();
        ll.add(1);
        System.out.println("" + ll.get(0));
    }
}

Und SlaterB's Gegenbeispiel ist auch mit import test2.Test3 anstelle von import test2.* noch ein Gegenbeispiel. Über die Funktionsweise des Classloaders weiß ich ansonsten nix.

Grüße,
Wolfram
 

Wildcard

Top Contributor
FArt hat gesagt.:
Alle Klassen, die im Import von Klasse A aufgeführt sind, werden in dem Moment vom Classloader geladen, in dem die Klasse A geladen wird.
Wie andere auch schon gesagt haben, das stimmt nicht. Ein import ist Schall und Rauch, reine Kurzschreibweise.
Nur weil Eclipse dir in der Standardeinstellung ein 'Warning' für unused imports gibt, muss es noch nicht schlecht sein.
Im übrigen gibt es auch bei Eclipse die möglich zu sagen wenn mehr als n Klassen aus einem Package importiert werden, ersetz die imports durch den .* Import.
Müsste ja dann bedeuten, dass zur Laufzeit alles durchsucht werden müsste, um Klassen zu finden, die man grundlos in den Perm-Space schaufeln will :wink:
 

FArt

Top Contributor
Nach genauem Evaluieren muss ich Wildcard und Wolfram unumwunden Recht geben.

Spec lesen bildet eben ;-)

Ich habe folgendes gesehen:
1.) Mein Factory-Beispiel von oben funktioniert auch mit Imports richtig. Warum es in einer Containerumgebung nicht geklappt hatte, muss an einem anderen Umstand liegen. Wie es aussieht reproduziert mein Minimalbeispiel nicht das ClassLoader-Problem, welches mir mal vor einiger Zeit untergekommen ist.

2.) Der SUN Compiler (JDK 1.4) kompiliert alle Deklarationen (ob mit import oder vollqualifiziert) zu Imports. Werden gleiche Klassennamen aus unterschiedlichen Packages im Code vollqualifiziert verwendet, wird einfach das zuerst geparste importiert, das andere vollqualifiziert gelassen. Lustig, ist aber so ;-)
Das habe ich mir mal mit einem Decompiler angesehen... man lernt ja immer was dazu...
 

Wildcard

Top Contributor
FArt hat gesagt.:
2.) Der SUN Compiler (JDK 1.4) kompiliert alle Deklarationen (ob mit import oder vollqualifiziert) zu Imports. Werden gleiche Klassennamen aus unterschiedlichen Packages im Code vollqualifiziert verwendet, wird einfach das zuerst geparste importiert, das andere vollqualifiziert gelassen. Lustig, ist aber so ;-)
Das habe ich mir mal mit einem Decompiler angesehen... man lernt ja immer was dazu...
Es gibt keine imports in class Files. Das macht der Decompiler :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
F Import SSL Zertifikat in keystore Java Basics - Anfänger-Themen 10
M import com.sun.star.uno Java Basics - Anfänger-Themen 25
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
java-starter Erste Schritte import von package Java Basics - Anfänger-Themen 4
J The import org.bukkit cannot be resolved Java Basics - Anfänger-Themen 3
E Paketstruktur und import Klauseln Java Basics - Anfänger-Themen 14
D import Befehle Java Basics - Anfänger-Themen 3
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
O Package import-Klausel Java Basics - Anfänger-Themen 10
O extrends vs. import Java Basics - Anfänger-Themen 14
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
W JavaFX import Fehler/Zellularautomaten Java Basics - Anfänger-Themen 1
T Erste Schritte JAR import Fehler Java Basics - Anfänger-Themen 2
Textsurfer Erste Schritte CSV Import Reader Writer Java Basics - Anfänger-Themen 0
S BufferedReader TextFields Import Java Basics - Anfänger-Themen 5
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G import utils.SourceHandler; Java Basics - Anfänger-Themen 5
L Klasse/Variable import Java Basics - Anfänger-Themen 7
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
slejden Erste Schritte der Befehl import Java Basics - Anfänger-Themen 2
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
I DATEV import / export Java Basics - Anfänger-Themen 2
O Probleme beim import von Projekten in Eclipse Java Basics - Anfänger-Themen 7
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
F Import von Zip-Datei in Eclipse Java Basics - Anfänger-Themen 1
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
FINF_AW_Alex import funktioniert nicht Java Basics - Anfänger-Themen 4
A Import anderer Classen aus anderen Projekten Java Basics - Anfänger-Themen 6
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
M import von eigener Klasse Java Basics - Anfänger-Themen 12
S import java.*; vs import java.awt.TextArea Java Basics - Anfänger-Themen 7
B ThreadPoolExecutor - import java.util.concurrent Java Basics - Anfänger-Themen 2
F import Prog1Tools.IOTools Java Basics - Anfänger-Themen 9
J Aus "import" die genutzte Library erfahren Java Basics - Anfänger-Themen 4
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
E Erste Schritte Import von Klassen Java Basics - Anfänger-Themen 8
B Compiler-Fehler import java.io.*; führt zu error Java Basics - Anfänger-Themen 2
N Probleme mit dem Import Java Basics - Anfänger-Themen 8
J ORACLE Spatial ungültiger Spaltenindex beim Import Java Basics - Anfänger-Themen 2
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
D Geschwindigkeits unterschied bei import? Java Basics - Anfänger-Themen 13
C import Java Basics - Anfänger-Themen 7
O Compiler-Fehler import funktioniert nicht Java Basics - Anfänger-Themen 2
D Import von import org.apache.commons.math3...... Java Basics - Anfänger-Themen 2
J Import in Java Java Basics - Anfänger-Themen 4
A Import Anwendungen Java Basics - Anfänger-Themen 2
D Frage zu der import Anweisung in Java Java Basics - Anfänger-Themen 15
S Erste Schritte import für andere Klassenfiles verfügbar machen? (Java unter Eclipse) Java Basics - Anfänger-Themen 8
F Problem mit import Java Basics - Anfänger-Themen 8
C Umgebungsvariable import anweisung gibt fehlermeldung Java Basics - Anfänger-Themen 2
algebraiker Textdatei-Import Java Basics - Anfänger-Themen 8
T .Java Import Java Basics - Anfänger-Themen 19
N Erste Schritte import javax.media.3d....; //Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 10
N Import Problem, Applet will nicht Java Basics - Anfänger-Themen 6
Q Classpath Package import Java Basics - Anfänger-Themen 6
J Erste Schritte import awt.* ;awt.event.*; Java Basics - Anfänger-Themen 3
B Wie funktioniert der Import von Dritt-packages in Eclipse? Java Basics - Anfänger-Themen 5
C Fehlermeldung "The import TestProjekt cannot be resolved". Warum? Java Basics - Anfänger-Themen 7
W Problem beim CSV-Import Java Basics - Anfänger-Themen 5
K Collections Problem beim import von Packages Java Basics - Anfänger-Themen 10
F Import mit .* oder nicht? Java Basics - Anfänger-Themen 3
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
F Problem mit "import" Java Basics - Anfänger-Themen 9
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
S import - Anweisung; Setzen der Classpath Java Basics - Anfänger-Themen 2
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
K OOP Java import zwei gleichnamiger Klassen Java Basics - Anfänger-Themen 5
M JS Import aus externer Jar Datei Java Basics - Anfänger-Themen 5
D OpenCSV Fehllender Konstruktor trotz import und Buildpath Eintrag Java Basics - Anfänger-Themen 1
M import einer Grafik aus .jar funktioniert nicht Java Basics - Anfänger-Themen 6
1 JMF Import Problem Java Basics - Anfänger-Themen 3
D import-fehlermeldung Java Basics - Anfänger-Themen 3
M java erkennt import-klassen nicht?! Java Basics - Anfänger-Themen 39
K OOP import Java Basics - Anfänger-Themen 13
B import Anweisung Java Basics - Anfänger-Themen 2
D OOP Pakete Import Java Basics - Anfänger-Themen 15
T Netbeans: Import von Externen Packet Java Basics - Anfänger-Themen 5
T Import von org.* Java Basics - Anfänger-Themen 6
E Frage zu "import" Java Basics - Anfänger-Themen 5
J Import von Paketen Java Basics - Anfänger-Themen 10
U2nt import wird nicht "angenommen" Java Basics - Anfänger-Themen 9
F import Statement für Klassen die dem default Package zugeordnet sind? Java Basics - Anfänger-Themen 2
O import ja....extends nein Java Basics - Anfänger-Themen 5
T The import In cannot be resolved Java Basics - Anfänger-Themen 31
X Befehl import Java Basics - Anfänger-Themen 21
T import java.util.scanner cannot be resolved Java Basics - Anfänger-Themen 19
G JAR ohne import in anderer JAR aufrufen Java Basics - Anfänger-Themen 3
S BITTE UM HILFE HASHTABLE/import java.util.Hashtable in Ecplipse Java Basics - Anfänger-Themen 12
E import org.eclipse.swt.Events.PaintListener; Java Basics - Anfänger-Themen 1
D Import Java Basics - Anfänger-Themen 2
C import von Java Klasse ohne package Java Basics - Anfänger-Themen 10
P import java.awt.*; nicht gefunden? Java Basics - Anfänger-Themen 21
X JOptionPane.showMessageDialog(); - Import Befehl? Java Basics - Anfänger-Themen 4
0 CSV Import - Zeilen, Spalten Java Basics - Anfänger-Themen 15
Bierhumpen import ? - bedeutung? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben