Object Initialisierung

specialize

Bekanntes Mitglied
Hallo,

zur Zeit handhabe ich es so, dass wenn ich ein Objekt in mehr als einer Methode benutze, es am Anfang initialisiere(oftmals ohne spezifischen Wert) und dann in der Methode dem Objekt einen Wert zuordne).
Wenn ich es nur in einer Methode benutze, initialisiere ich es in der Methode.

1) Was ist die bessere Lösung in hinsicht auf Schnelligkeit, Speicherbedarf,.. und warum?

2) Wenn ich es in der Methode initialisiere, kommt der Garbage collector am Ende der Methode?
 

faetzminator

Gesperrter Benutzer
Speichert diese Variable irgendwelche Werte zwischen den Methodenaufrufen? Oder ist sie einfach nur deklariert, damit sie nicht in jeder Methode deklariert werden muss?
Aber ganz grundsätzlich: Immer nur so lokal wie möglich halten. Ich halte auch so was nicht für sinnvoll:
Java:
String foo;
// some code
foo = ...;
Sondern
Java:
// some code
String foo = ...;

Edit:
1) Vergiss das ganz schnell wieder. Kümmer dich nicht drum.
2) Jain, er kommt irgendwann irgendwo, aber auch da zählt 1)
 

M_Schaffrath

Aktives Mitglied
Also die Code Conventions sehen vor, Variablen so lokal wie möglich zu halten, immer am Anfang eines Blocks zu deklarieren und möglichst bei der Deklaration zu initialisieren.

Ich denke nicht, dass die letzteren beiden Punkte irgendeinen Einfluss auf die Performance haben.
 

vonAltmann

Mitglied
1) Was ist die bessere Lösung in hinsicht auf Schnelligkeit, Speicherbedarf,.. und warum?
1) Vergiss das ganz schnell wieder. Kümmer dich nicht drum.

warum?? Haben solche Betrachtungen keine Auswirkung auf Performance? Bei nur einer Variable, klar spielt es keine rolle. Aber bei langen Schleifen?? Ich bin auch Javaanfänger und Frage mich was speichertechnisch günstiger ist.

Variante 1

Java:
String foo = "";

for(int n = 0 ; i< dreimalundendlich :-) ; i++){
      foo = irgendwas()
}

oder Variante 2

Java:
for(int n = 0 ; i< dreimalundendlich :-) ; i++){
     String foo  = irgendwas()
}

Sagen wir noch, dass der String foo außerhalb der schleife nicht mehr gebraucht wird.
Bei Variante 1 wird der Speicherplatz doch nur einmal belegt und dann überschrieben.
Bei Variante 2 werden dreimalunendlich wiele Strings erzeugt oder nicht? Und unendlich ist schon groß aber dreimal?? Wieviel kostet eigentlich unendlich viel RAM??

Ich hoffe ihr könnt die schlechten Witze vertragen, die Frage ist schon ernst gemeint.
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
M_Schaffrath hat alles dazu gesagt. Lege den Scope der Variablen immer nur so klein fest, wie notwendig.
Wenn du aber irgendwann je irgendwo in einem deiner Programme Performance- oder Speicherprobleme haben wirst, kann man für das konkrete Problem eine Lösung suchen. Aber normalerweise wurde einfach irgendein Algorithmus schlecht implementiert. Ob man nun Variablen da oder da deklariert, ist grundsätzlich wurst.
Sagen wir noch, dass der String foo außerhalb der schleife nicht mehr gebraucht wird.
Dann wird er innerhalb der Schleife deklariert.
Bei Variante 1 wird der Speicherplatz doch nur einmal belegt und dann überschrieben.
Das ist nur eine Variable mit einer Referenz auf einen String.
Bei Variante 2 werden dreimalunendlich wiele Strings erzeugt oder nicht? Und unendlich ist schon groß aber dreimal?? Wieviel kostet eigentlich unendlich viel RAM??
Strings hast du genau gleich viele. Irgendwie hats hier viel zu viele "unendlich" in deinen Fragen. Ich weiss echt nicht, auf was du hinaus willst. Vergiss das Thema einfach ganz schnell wieder ;)
 

M_Schaffrath

Aktives Mitglied
Du hast aber keine Ahnung, was der Java-Compiler und der Garbage Collector mit deinem Code anfangen und ob das tatsächlich alles so ausgeführt wird, wie du es hinschreibst. Und bis deine Anweisungen irgendwas im Speicher oder im Prozessor tun, passieren noch allerlei Dinge, über die du null Kontrolle hast. In der Praxis spielt das auch eigentlich selten eine Rolle.

Gerade als Anfänger sollte man sich eher darauf konzentrieren, aufgeräumten, lesbaren Code zu schreiben, als versuchen zu wollen, schlauer als der Compiler zu sein.
 

Landei

Top Contributor
Die JVM merkt bei der zweiten Variante, dass sie den Speicherbereich für foo bei jedem Durchlauf wiederverwenden kann. Insgesamt ist das Ding ziemlich clever. Spekulationen über die Performance sind sinnlos, für eine Einschätzung helfen nur zwei Dinge: Geschwindigkeit messen (und aussagekräftige Benschmarks zu schreiben ist ziemlich schwierig) oder den Bytecode anschauen - und selbst das ist nicht hundert Prozent sicher (wegen unterschiedlicher VMs oder unterschiedlichen Optimierungseinstellungen).

Nur mal als Beispiel, was da hinter den Kulissen abgeht: Mein Kollege hat neulich einen Bug gesucht: Der Code lief bei ihm, aber nicht auf dem Server. Der Unterschied war, dass ein [c]long getId() { return super.getId(); }[/c] auf dem Server komplett wegoptimiert wurde (worauf aber mit Reflection zugegriffen wurde).
 
Zuletzt bearbeitet:

vonAltmann

Mitglied
OK, danke für die vielen antworten und sorry an den Threadersteller, das ich deinen Beitrag missbraucht hab. Die Frage die ich hatte hat sich geklärt. Ich kann mich also schon darauf verlassen, dass der GC bzw. VM clever genug sind um auf solche sachen zu achten. Ich habe, bevor ich mit Java angefangen habe, Microcontroller mit Assembler programmiert. Diese Teile haben extrem wenig speicher. So ein bischen mehr als Null halt :) Da war jedes Byte wichtig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T Object in Array Java Basics - Anfänger-Themen 3
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
M object cast auf double Java Basics - Anfänger-Themen 2
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
D Aus Object auslesen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
C mehrdimensionales Object sortieren Java Basics - Anfänger-Themen 4
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
T List.add(Object) führt zu NullPointerException Java Basics - Anfänger-Themen 14
F Wie kann ein Object[] zu Integer[] umwandeln? Java Basics - Anfänger-Themen 6
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3
Ollek Collections ArrayList Object - Attribut von dem Object vergleichen Java Basics - Anfänger-Themen 7
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
B Object an Server senden, Server antwortet mit objekt? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben