Gần đây tôi đã chạy một số tiêu chuẩn cố gắng tìm các khung công tác tuần tự hóa "tốt nhất" cho C++ và cũng trong Java. Các yếu tố tạo nên "tốt nhất" cho tôi là tốc độ của de/serializing và cũng là kích thước kết quả của đối tượng được tuần tự hóa.Serialization - sự khác biệt giữa C++ và Java
Nếu tôi xem kết quả của các khung công tác khác nhau trong Java, tôi thấy rằng byte kết quả [] thường nhỏ hơn kích thước đối tượng trong bộ nhớ. Điều này thậm chí là trường hợp với việc xây dựng tuần tự Java. Nếu bạn sau đó xem xét một số các dịch vụ khác (protobuf, vv) thì kích thước sẽ giảm nhiều hơn.
Tôi khá ngạc nhiên khi nhìn vào mọi thứ trên kích thước C++ (tăng, protobuf) mà đối tượng kết quả thường không nhỏ hơn (và trong một số trường hợp lớn hơn) so với đối tượng ban đầu.
Tôi có thiếu gì đó ở đây không? Tại sao tôi nhận được một số tiền hợp lý của "nén" miễn phí trong Java nhưng không phải trong C + +?
n.b để đo kích thước của các đối tượng trong Java, Tôi đang sử dụng Instrumentation http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html
getObjectSize dài (Object objectToSize) Trả về xấp xỉ xấp xỉ về dung lượng lưu trữ được sử dụng bởi đối tượng được chỉ định. Kết quả có thể bao gồm một số hoặc tất cả các chi phí của đối tượng, và do đó rất hữu ích để so sánh trong một quá trình thực hiện nhưng không phải giữa các lần triển khai. Ước tính có thể thay đổi trong một lần gọi đơn lẻ của JVM. – user2384396