Größe eine Variablen in Bytes?

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Gibts ne Möglichkeit dass man sich die Bytes, die eine Variable im Speicher belegt, ausgeben lassen kann?

- Alex
 
S

SlaterB

Gast
du kannst dir die aktuelle Speicherbelegung anschauen:
Code:
        Runtime runtime = Runtime.getRuntime();
        long max = runtime.maxMemory();
        long free = runtime.freeMemory();
        long total = runtime.totalMemory();
wenn du das einmal machst,
ein Array der Länge 100.000 vom gewüschten Typ anlegst
und nochmal den Speicher anschaust,
dann dürften recht genau x00.000 Bytes mehr belegt sein
 

jPat

Bekanntes Mitglied
Es gibt aber ein tool jconsole.exe. damit kannst du deine Programme ganz gut überwachen .... Evtl findes du dort etwas.
 
T

tuxedo

Gast
Ach, nix wildes:

Für meinen JDBC-Treiber (http://jpmdbc.dev.java.net) würd ich gerne ne Art Benchmark-Test machen, und da wäre es interessant zu wissen wie viel Speicher meine im ResultSet verwendete Daten-Variable braucht. Im Endeffekt kann ich ja auch die Bytes lesen die ich aus dem Stream gelesen hab. Dachte halt es gäbe was um eine Varibale exakt zu bestimmen.

- Alex
 

Wildcard

Top Contributor
alex0801 hat gesagt.:
Dachte halt es gäbe was um eine Varibale exakt zu bestimmen.
Dafür ist erst mal die Metrik interessant.
Nimm an ein Objekt x braucht 20 byte.
Ein zweites Objekt mit gleichem Inhalt braucht nun aber nur noch 10 byte weil sie sich Resource Teilen.
Welcher der beiden Werte ist der echte Speicherverbrauch?
Zählen Referenzen auf enthaltene Objekte mit?
Wenn ja, nur die Größe der Referenz, oder auch deren Größe?
Was passiert mit Objekten nach dem Fliegengewicht Muster?
Du siehst, so einfach ist die Sache nicht.
 
T

tuxedo

Gast
Naja, ich habs halt in Bezug auf ne HashMap gesehen, ohne weitere verlinkung oder so. Wenn ich sowas serialisiere und irgendwo speichere hab ich ja auch ne bestimmte Größe.

- Alex
 

Wildcard

Top Contributor
Ja, du bekommst eine Größe. Ob es die ist, die für dich interessant ist, kannst nur du selbst beantworten.
 
T

tuxedo

Gast
Naja, die Größe repräsentiert irgendwie die Größe der Daten in meiner HashMap. Ob da jetzt ein wenig "overhead" dabei ist oder nicht, spielt für mich eine untergeordnete Rolle. Mir gehts nur dum eine Größe zu finden die reproduzierbar ist und die ich vergleichen kann.
 
T

tuxedo

Gast
jepp, serialisierung wäre das eine. die andere Lösung, für meinen Fall, wäre das mitzählen der empfangenen bytes.

Aber wenns halt schon sowas gegeben hätte wie z.B. (frei erfunden).

Code:
public int System.getMemoryUsage(Object o)

oder so, wäre das halt "cooler" gewesen.
 
G

Gast

Gast
naja das kannst du dir ja selber ausrechnen. Die größen der primitiven datentypen sind bekannt (google) also int z.B. 32bit und das kannst du dir ja dann einfach zusammen rechnen, rekursiv wenn du möchtest
 
T

tuxedo

Gast
Naja, ich hab "komplexe/verschachtelte" HashMaps mit byte[]'s drin... da müsst ich erst alles abklappern ums zusammen zu rechnen. Aber egal. ich hab ja genug lösungsmöglichkeiten.

- Alex
 

Wildcard

Top Contributor
alex0801 hat gesagt.:
Code:
public int System.getMemoryUsage(Object o)

oder so, wäre das halt "cooler" gewesen.
Und ich habe dir bereits erklärt warum es so etwas nicht gibt. Weil sich jeder auf eine andere Metrik bezieht und eine allgemeine Methode daher Unsinn ist.
 
S

SlaterB

Gast
es gibt doch nur eine Metrik, die kinderleicht als die entscheidene zu erkennen und zu berechnen ist:
der aktuelle Speicherverbrauch des Objekes,

so wie wenn man es zu diesem Zeitpunkt serialisieren würde,
so wie der Garbage-Collector sich alles anschaut,

das ist präzise, nichts anderes könnte man von einer solchen Operation zu einem aktuell vorhandenen Objekt zur Laufzeit erwarten

gerne kann man sich mit Spezialfällen rumärgern, z.B. Objekte die auf System- oder AWT-Variablen verweisen und dann transitiv den halben Speicher mitreferenzieren,
für die wäre das Ergebnis dann eben unbrauchbar, für einfache eigene Objekte aber umso nützlicher

dass man simple Referenzen auf gleiche Objekte usw. bedenken muss, ist ja kein Nachteil,
das muss man etwa bei runtime.freeMemory() genauso
 

Wildcard

Top Contributor
SlaterB hat gesagt.:
es gibt doch nur eine Metrik, die kinderleicht als die entscheidene zu erkennen und zu berechnen ist:
der aktuelle Speicherverbrauch des Objekes,
Um hier nicht weiter abzuschweifen nehmen wir ein ganz einfaches Beispiel.
Mein Objekt ist eine Instanz dieser Klasse:
Code:
class Foo{
   public String bar;
}
Wie ist der Speicherverbrauch zu berechnen?
 
G

Gast

Gast
Speicherverbrauch = Referenz auf String + Größe von String Objekt

und die Größe vom String kann man dann rekursiv wieder auflösen bis man bei den primitiven datentypen angekommen ist
 

Wildcard

Top Contributor
Gast hat gesagt.:
Speicherverbrauch = Referenz auf String + Größe von String Objekt

und die Größe vom String kann man dann rekursiv wieder auflösen bis man bei den primitiven datentypen angekommen ist
String instanzen werden in einem Pool gesammelt und unter den Objekten verteilt. Der selbe String (und substrings davon) belasten den Speicher also nur einmal.
 
S

SlaterB

Gast
> Wie ist der Speicherverbrauch zu berechnen?

Arbeitsspeicher, locker und leicht, jedes einzelne Bit ist genau definiert..

> Der selbe String (und substrings davon) belasten den Speicher also nur einmal.

was ja bei jedem Objekt der eigenen Klasse genauso ist, völlig normaler Vorgang,
bei String gibts natürlich die Besonderheit, dass die vom System zusammengesetzt werden und z.T. doppelt sind,
das muss man wissen, und hoffentlich in seinem Programm beachten, ändert aber an der Eindeutigkeit nichts

es sei denn, es findet irgendwann mal eine Optimierung statt, bei der gleiche Strings zusammengelegt werden?
wird z.B. bei der Serialisierung was besonderes gemacht, vielleicht auch andersrum: mehrere Referenzen auf gleichen String einzeln gespeichert?
(in separaten Dateien eh für alle Objekte, aber in einer Datei)

wie auch immer es geregelt ist, es gibt eine eindeutige vom System vorgegebene aktuelle Größe
 
T

tuxedo

Gast
@Wildcard

Naja, man kann die ganze Sache auch zu feingranular betrachten...

@SlaterB

Du hasts getroffen (schon in nem vorherigen Post von dir). Genau sowas hab ich mir vorgestellt. Aber ne einfache Methode du man einfach aufrufen kann gibts da nicht, oder etwa doch?

Klar, ich könnte weiter an meiner serialisierung festhalten. Aber das geht ja unter Umständen wieder zu lasten der Laufzeit. Wenn dem GC und Co. solche Sachen bereits bekannt sind und man die Abfragen könnte, wäre das "schick" :)

-Alex
 

Wildcard

Top Contributor
SlaterB hat gesagt.:
wie auch immer es geregelt ist, es gibt eine eindeutige vom System vorgegebene aktuelle Größe
Nein, genau die gibt es nicht. Es gibt mehrere Einzelgrößen die je nach Metrik zusammengesetzt werden müssen.
Was du als die einzig richtige Metrik verkaufst, kann für meinen Anwendungsfall totaler Unsinn sein.
Ich sage ja nicht das es unmöglich ist solche Größen zu messen, nur die Parameter muss jeder eben selbst festlegen.
 
S

SlaterB

Gast
nun, was alles Unsinn ist muss jeder selber wissen,

da es aber eben nur einen einzelnen Arbeitsspeicher zu verwalten gibt,
ist die Belegung dieses Arbeitsspeichers zum einen eine äußerst sinnvolle Information und zum anderen eindeutig zu berechnen,
(zum dritten: gibts zum Teil schon, siehe Runtime.getFreeMemory())

wenn das nicht zwei Killerargumente für eine derartige Operation sind, dann weiß ich auch nicht ;)

ich widerspreche dir ja von Anfang an nicht, dass verschiedene Größen denkbar sind,
ich sage nur, dass es eine eindeutige vorgegebe, sozusagen kanonische, REALE Größe gibt,
die man natürlich unter den vorgegebenen Randbedingungen interpretieren muss
 

Wildcard

Top Contributor
SlaterB hat gesagt.:
da es aber eben nur einen einzelnen Arbeitsspeicher zu verwalten gibt,
ist die Belegung dieses Arbeitsspeichers zum einen eine äußerst sinnvolle Information und zum anderen eindeutig zu berechnen,
(zum dritten: gibts zum Teil schon, siehe Runtime.getFreeMemory())
Richtig, Runtime.getFreeMemory gibt es (hier ist es auch eine eindeutige Sache, und richtig, die Belegung des Arbeitsspeichers lässt sich eindeutig bestimmen, und richtig, es ist eine nützliche Information.
Aber:
Die Menge an Speicher die ein Objekt im Arbeitsspeicher belegt, steht auf einem ganz anderen Blatt und lässt sich eben nicht mit allgemeingültigen Kriterien erschlagen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
J Größe einer CD ermitteln Allgemeine Java-Themen 10
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
N Kombinationen beliebiger Größe berechnen Allgemeine Java-Themen 1
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
C Ein Array mit der Größe von 1 KB erstellen Allgemeine Java-Themen 3
L Größe eines Objekts im Arbeitsspeicher Allgemeine Java-Themen 1
M ZipOutputStream gleiche Datei andere Größe? Allgemeine Java-Themen 0
M Array "Größe" anpassen Allgemeine Java-Themen 2
V Files mit Umlauten ergeben keine Größe Allgemeine Java-Themen 9
E ArrayList mit unbekannter Größe Allgemeine Java-Themen 8
F String in feste Größe zerlegen Allgemeine Java-Themen 11
F JFreeChart Größe anpassen Allgemeine Java-Themen 8
Z Position/Größe von Windows-Fenstern ermitteln Allgemeine Java-Themen 12
B JScrollPane und JPanel: Scrollen nur nach Größe des JPanels Allgemeine Java-Themen 2
W Größe des eingebauten Arbeitsspeichers auslesen Allgemeine Java-Themen 13
Developer_X Java3D-Ball größe angeben Allgemeine Java-Themen 12
reibi Größe Array aus bytes Allgemeine Java-Themen 14
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
G ändernde größe des GrindBagL Allgemeine Java-Themen 2
L unterschiedliche Größe beim serialisieren eines Objektes! Allgemeine Java-Themen 6
G itext größe von image Allgemeine Java-Themen 2
S array von unbekannter größe Allgemeine Java-Themen 2
C Größe von einem File Allgemeine Java-Themen 9
D JFrame vergrößert nicht auf die gewünschte Größe Allgemeine Java-Themen 2
S Bild Größe verändern Allgemeine Java-Themen 2
G String Array Größe begrenzt? Allgemeine Java-Themen 4
B ArrayList mit Größe initialisieren Allgemeine Java-Themen 16
P Größe eines Directories ermitteln mit allen SubDIR`s Allgemeine Java-Themen 28
P Maximale Größe einer Klasse Allgemeine Java-Themen 9
G Image in der Größe ändern Allgemeine Java-Themen 2
S Swing - Problem mit Fenster-/Komponenten-Größe Allgemeine Java-Themen 3
R Größe der JRE anpassen Allgemeine Java-Themen 18
G http maximale transfer größe? Allgemeine Java-Themen 3
M Datein einlesen und in feste Größe aufsplitten Allgemeine Java-Themen 2
J Größe von 2D-Arrays Allgemeine Java-Themen 3
H Größe eines Bildes ändern und Bild speichern Allgemeine Java-Themen 11
E JPEG Datei Größe und Qualität ändern (für Thumbnails) Allgemeine Java-Themen 4
H Größe eines Schriftzeichens ermitteln Allgemeine Java-Themen 2
thE_29 Größe bzw. Zeilen einer Datei Allgemeine Java-Themen 4
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben