sizeof java-Objekt
Wie können wir die Größe ein java-Objekt??
Beispiel:
class Person{
String name;
int age;
public Person(String n, int a){
name = n;
age = a;
}
}
Person person = new Person("Andy", 30);
nun, wie kann ich wissen, die Größe der person-Objekt??
Danke
Warum brauchen Sie, um die Größe des Objekts?
Wenn Sie wirklich wissen müssen, um... stackoverflow.com/questions/52353/...
betrachten Sie das Szenario, wo wir nur über eine begrenzte Speicher und die Anwendung hat mehrere Objekte, die Speicher belegen, wie würden wir dann erkennen, welches Objekt mehr Raum einnimmt und handle auch entsprechend.
perfekt, vielen Dank!
begrenzter Speicher = Android?
Wenn Sie wirklich wissen müssen, um... stackoverflow.com/questions/52353/...
betrachten Sie das Szenario, wo wir nur über eine begrenzte Speicher und die Anwendung hat mehrere Objekte, die Speicher belegen, wie würden wir dann erkennen, welches Objekt mehr Raum einnimmt und handle auch entsprechend.
perfekt, vielen Dank!
begrenzter Speicher = Android?
InformationsquelleAutor daydreamer | 2010-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Frage ist nicht sinnvoll, zumindest nicht ohne weiteren Kontext.
Den Begriff der "Größe" in Java ist nur einigermaßen gut definiert primitive: Ein byte ist 8 bit (wenig überraschend) eine
int
ist 32-bit, einelong
64bit, etc. (siehe z.B. http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html für eine vollständige Liste).Für object-Instanzen, es ist komplizierter, weil:
java.lang.String
finden Sie http://en.wikipedia.org/wiki/String_interning ). Also, wenn Sie x verwenden, Objekte der Größe y, die insgesamt eine Größe kleiner sein kann als x*yEs können verschiedene Techniken benutzen, die für verschiedene Instanzen (z.B. den Austausch interner Daten-Strukturen), so kann es nicht sogar sein, dass eine sinnvolle "Größe" weisen auf ein einzelnes Objekt.
Vielleicht könnten Sie erklären, warum Sie daran interessiert sind, im Objekt-Größen.
Gibt es einige Faustregeln für die Abschätzung der heap-Speicher von Instanzen (z.B. in der Sun JVM, ein
java.lang.Object
Instanz verwendet 8 byte), aber diese hängt von der JVM, die Sie benutzen.In der Regel, wenn Sie wissen möchten, über Ihre in die heap-Verwendung, Verwendung einer memory /heap-profiler.
Edit:
Gut, es ist (als JDK 6) ein Weg, um eine Annäherung an die Menge des verwendeten Speichers durch ein Objekt: http://download.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize%28java.lang.Object%29
Es ist immer noch nur eine Annäherung...
InformationsquelleAutor sleske
Ich denke, man kann etwas bekommen, das könnte Ihnen helfen, wenn Sie etwas wie das hier tun:
Das wird sich hoffentlich geben Sie die Antwort, die Sie wollen, oder zumindest eine Annäherung.
Ich würde ein kleinen kontrollierten test für die Objekte möchte ich messure. Wenn Sie dies tun, in einer Multithread-Umgebung, dann sind alle Wetten ab.
InformationsquelleAutor Knubo
EhCache bietet eine SizeOf - Klasse, wird versuchen, die Instrumentation agent und wird wieder einen anderen Ansatz, wenn der agent nicht geladen oder nicht geladen werden kann (details hier).
Siehe auch der agent von Heinz Kabutz.
InformationsquelleAutor sourcedelica
Können Sie die sizeof4j Bibliothek zur Berechnung der Größe jedes Objekt in java wie
SizeOf.shallowSize(new Integer(2))
InformationsquelleAutor Artur Mkrtchyan
Referenz : http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X
InformationsquelleAutor daydreamer
Java hat keine eingebaute
sizeof
Betreiber.Könnten Sie versuchen, und verwenden Sie eine Serialisierungs-Methode, die durch Serialisierung ein Objekt Speicher und die Größe der Daten, aber das würde nicht unbedingt die Größe, die Sie wollen.
Könnte man auch über eine Methode namens
sizeOf()
wie diese:Beachten Sie, dass diese Implementierung nicht die Metadaten im Namen, nur die Anzahl der bytes, die erforderlich sind, um die
char[]
.Bearbeitet, Hinzugefügt habe ich, dass Informationen... ehrlich, ich glaube nicht, dass Java jemals gedacht war, um eine Funktion haben, wie die...
Ich glaube, dass die Serialisierung ist nicht die genaue Art und Weise, es zu tun, da es fügt Metadaten mit Objekten, so dass die de-Serialisierung weiß, wie das Objekt rekonstruiert
Richtig. Die zweite Methode ist genauer, aber immer noch, warum würden Sie brauchen, zu wissen, wie groß ein Objekt.. dieser Größe ist ähnlich wie die C/C++
sizeof
?Ich habe keine Ahnung, RD gab einen link oben, dass der check out, das scheint eine gute!
InformationsquelleAutor Richard J. Ross III