Wieviel Speicher verbraucht ein Array?

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Gibt es eigentlich irgendeine Möglichkeit die wirkliche Größe eines Arrays im Speicher zu bestimmen?

Wenn ich z.B. ein Array mit 10 Floats habe, dann muss doch auch irgendwo gespeichert sein welche Werte als Index zulässig sind, das Array hat also einen gewissen Overhead. Wie groß ist der aber genau? Sizeof gibt es ja leider nicht in Java und mir fallen auch keine Tests mehr ein mit denen ich es evtl. ermitteln könnte.
 
So kannst dus in etwa messen:



Code:
public class test {
  public static void main(String[] a) {
        Runtime r = Runtime.getRuntime();
    	long l;
        l= r.freeMemory();        
        int[] array = {};
        System.out.println(l - r.freeMemory());    
	
   }
}
 
Hm genau sowas suche ich auch.
Aber ich habe folgendes Problem.
Mein Programm läuft auf einem Embededsystem und daher ist der Speicherverbrauch und besonders die Laufzeit interessant.
Kann es zudem nicht sein, dass r.freeMemory() den "aktuell" freien Arbeitsspeicher liefert, dann ein komplett anderer prozess eines anderen Tasks eine Variable initialisiert, dann wiederrum l-r.freeMemory() einen falschen wert liefert?

Anders sieht es aus, wenn man ein oder das Objekt serialisiert und auf dem Rückgabearray die lenghtfunktion benutzt.
dann erhält man genau die größe des Objektes in Byte nur ist es laufzeittechnisch doch eher ressourcenfressend.

Oder liege ich da falsch?
 
was das selbe ist, was sizeof auch liefert;
naja eigentlich nur das man beim serialisieren angeben kann was wann wo und ob konvertiert wird.
sizeof liefert die größe des objektes
 
und was ist wenn ich bei meinem Object, dass nur einen int beinhaltet, in der writeObject methode noch 100kb kommentartext mit schreibe? dann ist mein objekt auch im speicher 100k groß? sicher nicht.

oder ich serialisiere per ObjectOutputStream und XStream, dann hab ich zwei unterschiedlich große ergebnisse. wie groß ist das objekt jetz im speicher? einer von beiden muss lügen ... oder beide 😉

serialisieren mag im glücksfall mal den korrekten wert liefern, aber sonst nicht.

den genauen speicherverbrauch wirst du ohne spezialfunktionen deiner VM imo nicht in erfahrung bringen können
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben