Я недавно использовал некоторые тесты, пытаясь найти «лучшие» схемы сериализации для C++, а также в Java. Факторы, которые составляют «лучшие» для меня, - это скорость/сериализация, а также результирующий размер сериализованного объекта.Сериализация - различия между C++ и Java
Если я посмотрю на результаты различных фреймворков в Java, я вижу, что полученный байт [] обычно меньше размера объекта в памяти. Это даже в случае со встроенной сериализацией Java. Если вы затем посмотрите на некоторые другие предложения (protobuf и т. Д.), Размер уменьшается еще больше.
Я был очень удивлен, что, когда я смотрел на вещи на C++ (boost, protobuf), результирующий объект обычно не меньше (а в некоторых случаях и больше), чем исходный объект.
Я что-то упустил? Почему я получаю справедливое количество «сжатия» бесплатно на Java, но не на C++?
n.b для измерения размеров объектов в Java, я использую Инструментарий http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html
long getObjectSize (Object objectToSize) Возвращает специфическое для реализации соответствие объема хранения, потребляемого указанным объектом. Результат может включать в себя некоторые или все служебные данные объекта и, следовательно, полезен для сравнения в рамках реализации, но не между реализациями. Оценка может измениться во время одного вызова JVM. – user2384396