Ostatnio przeprowadzałem testy porównawcze, próbując znaleźć "najlepsze" frameworki serializacji dla C++, a także w Javie. Czynniki, które składają się na "najlepsze" dla mnie, to szybkość de/serializacji, a także wynikowy rozmiar serializowanego obiektu.Serializacja - różnice między C++ i Javą
Jeśli przyjrzeć się wynikom różnych frameworków w Javie, widzę, że wynikowy bajt [] jest na ogół mniejszy niż rozmiar obiektu w pamięci. Jest tak nawet w przypadku wbudowanej serializacji Java. Jeśli spojrzysz na niektóre inne oferty (protobuf itd.), Rozmiar jeszcze bardziej się zmniejszy.
Byłem bardzo zaskoczony, że gdy patrzyłem na rzeczy w rozmiarze C++ (boost, protobuf), wynikowy obiekt nie jest na ogół mniejszy (i w niektórych przypadkach większy) niż oryginalny obiekt.
Czy tu czegoś brakuje? Dlaczego dostaję sporą ilość "kompresji" za darmo w Javie, ale nie w C++?
N.B do pomiaru wielkości obiektów w Javie używam Instrumentation http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html
long getObjectSize (Object objectToSize) Zwraca specyficzne dla implementacji przybliżenie ilości pamięci używanej przez określony obiekt. Wynik może obejmować niektóre lub wszystkie koszty obiektu, a zatem jest przydatny do porównania w ramach implementacji, ale nie między implementacjami. Estymacja może ulec zmianie podczas jednego wywołania maszyny JVM. – user2384396