Ich habe kürzlich einige Benchmarks ausgeführt, die versuchen, die "besten" Serialisierungsframeworks für C++ und auch in Java zu finden. Die Faktoren, die "am besten" für mich ausmachen, sind die Geschwindigkeit de/Serialisierung und auch die resultierende Größe des serialisierten Objekts.Serialisierung - Unterschiede zwischen C++ und Java
Wenn ich mir die Ergebnisse verschiedener Frameworks in Java anschaue, sehe ich, dass das resultierende Byte [] in der Regel kleiner ist als die Objektgröße im Speicher. Dies ist sogar der Fall bei der eingebauten Java-Serialisierung. Sieht man sich dann einige andere Angebote an (Protobuf etc.), sinkt die Größe noch mehr.
Ich war ziemlich überrascht, dass, wenn ich Dinge auf der C++ - Größe (Boost, Protobuf) betrachtete, das resultierende Objekt im Allgemeinen nicht kleiner (und in einigen Fällen größer) als das ursprüngliche Objekt ist.
Fehle ich hier etwas? Warum bekomme ich eine Menge "Komprimierung" kostenlos in Java, aber nicht in C++?
N. B für die Größe der Objekte in Java zu messen, ich bin mit Instrumentation http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html
long getObjectSize (Objekt objectToSize) Gibt eine implementierungsspezifische Approximation der Speichermenge zurück, die vom angegebenen Objekt belegt wurde. Das Ergebnis kann einen Teil oder den gesamten Overhead des Objekts enthalten und ist somit nützlich für den Vergleich innerhalb einer Implementierung, jedoch nicht zwischen Implementierungen. Die Schätzung kann sich während eines einzelnen Aufrufs der JVM ändern. – user2384396