Größe von Objekten

onlein

Mitglied
Hallo
Erstmal kurz zu mir: Ich habe in den letzten Jahren immer wieder versucht, mich in Java (und überhaupt tiefer in die Programmierung) einzulesen. Das ist immer nach kurzer Zeit wieder eingeschlafen. Diesmal bin ich dran geblieben und habe vor ein paar Wochen meinen Durchbruch gehabt. Ich habe das Prinzip (auch die Objektorientierung) begriffen. Jetzt geht es Schlag auf Schlag vorwärts.

Für die Frage erläuter ich mal kurz das erste Projekt:
Als Taxifahrer habe ich mir in Excel eine Statistik angelegt. Einnahmen, gefahrene Kilometer, errechnetes Brutto und Netto, Durchschnittsgeschwindigkeit, etc.
Diese Tabellen will ich in einem Java-Programm umsetzen, bzw. durch das Programm ersetzen. Ich bin jetzt soweit, dass ich den ersten Wochentag des Monats und die Anzahl der Tage angebe, und das Programm zählt mir die Tage des Monats richtig auf. (z.B. 1. Samstag, 2. Sonntag, ...) Ich habe auch eine Methode, um jeden Tag gezielt anzusprechen.
Die beiden Grunddaten des Monats schreibe ich in eine .txt und lese sie auch wieder aus.

Nun zu meiner Frage:
Um die Tage mit den entsprechenden Daten zu "füllen" habe ich vor, nach dem Einlesen der .txt für jeden Tag ein Objekt zu erstellen. Und da weiß ich nicht, ob mein Denkansatz in die richtige Richtung geht. Ich habe keine Vorstellung, wie viel Speicherplatz ein Objekt belegt. Jeder Tag, ob ich arbeite oder nicht, wäre ein Objekt der Klasse Kalendertag. Das Programm würde also nach dem Einlesen allein für ein Jahr 365 Objekte erstellen. Ist das Pipifax, oder schaufel ich mir damit den Arbeisspeicher voll?

Ich hoffe, das war jetzt nicht zu lang.
Gruß
Rene
 
Es kommt darauf an wie groß der Arbeitsspeicher ist denn du hast 😉
In der Arbeit stehen mir 32GB zur Verfügung, das reicht vollkommen aus für mehrere Millionen Objekte. Wobei hier auch wieder zu sagen ist, jedes Objekt hat eine andere Größe da ja jedes Objekt andere Daten speichert!

Aber generell sollte der Arbeitsspeicher kein Problem darstellen, jedes Programm hat andere Objekte und verbraucht daher eine andere Größe an Speicher. Aber so 365 Objekte sollten keine 100MB belegen (je nachdem was das Objekt speichert)
 
Um es auf den Punkt zu bringen: Es ist Pipifax!

Offensichtlich speicherst du nicht viele Daten (Zahlen, Datum). Und 365 ist auch nicht viel. Wenn du größere Texte oder > 50 Daten pro Objekt speicherst und von diesen Objekten 3.650.000 hast, DANN könnte man ANFANGEN über Arbeitsspeicher zu reden.

Generell würde ich das Programm so schreiben, dass es eine gute und einfache Struktur hat. Wenn du irgendwann eine "OutOfMemoryException" bekommst (die ich bisher immer nur bei Endlos-Schleifen bekommen habe), dann (und auch wirklich erst dann) solltest du dir über den Speicherverbrauch Gedanken machen. Alles andere ist der Versuch sich um ungelegte Eier zu kümmern... völlig sinnfrei.

@onlein: Ich bezweifle, dass du Java auch 32 GB zugewiesen hast 😉 Und wozu, zum Geier brauchst du 32 GB Arbeitsspeicher?! 😱
 
@onlein: Ich bezweifle, dass du Java auch 32 GB zugewiesen hast 😉 Und wozu, zum Geier brauchst du 32 GB Arbeitsspeicher?! 😱

Migration von Anwendungen nach Java, Parsen von Daten nach Oracle/DB2 etc., Parsen von SourceCode etc.

Gerade letzte Woche hatte ich immer wieder eine OOM Exception da ich die Produktionsdaten (~25GB) von etwas parsen musste, leider muss man in diesem Fall erst alles parsen bevor man daraus etwas sinnvolles generieren kann. Mit den Testdaten (~2GB) hat es noch gereicht alles in den Speicher zulesen. Bei den richtigen Daten war es dann aber zu viel 😀

Also die 32GB sind schon recht fein, bei solchen Sachen. Hier und da kann man diese gut Nutzen aber man braucht es nicht häufig.
 
@onlein: Ich bezweifle, dass du Java auch 32 GB zugewiesen hast 😉 Und wozu, zum Geier brauchst du 32 GB Arbeitsspeicher?! 😱
Sorry - die 32GB stammen nicht von mir, sondern aus der 1. Antwort. 😉

Danke für die Antworten! Dann kann ich meinen bisherigen Plan erstmal weiter verfolgen.
In den Beispielen der Javainsel hat man ja in der Regel nur 1-2 Objekte, die wieder verworfen werden, wenn die Methode abgearbeitet ist. Daher hatte ich einfach keine Vorstellung, wie das mit vielen Objekten aussieht.
Deshalb waren das für mich auch keine ungelegten Eier, sondern Teil der oben angemahnten strukturellen Planung.

Danke nochmals!
 
In den Beispielen der Javainsel hat man ja in der Regel nur 1-2 Objekte, die wieder verworfen werden, wenn die Methode abgearbeitet ist. Daher hatte ich einfach keine Vorstellung, wie das mit vielen Objekten aussieht.
Deshalb waren das für mich auch keine ungelegten Eier, sondern Teil der oben angemahnten strukturellen Planung.

Klar bei diesen Beispielen werden nur kleine Objekte verwendet, und diese existieren meist auch nur in der Methode. Programmiere einfach mal soweit wie du kommst, solltest du irgendwann bemerken das der Speicher doch knapp wird, dann kann man immer noch schauen.
Normalerweise hast du dann irgendwo in deinem Programm noch Referenzen auf Objekte die du eig nicht mehr brauchst.
 

Zurück
Oben