Если я возьму XML файл, который находится вокруг 2kB на диске, и загрузите содержимое в виде строки в память на Java, а затем измерьте размер объекта вокруг 33kB.
Почему огромный рост размера?
Если я делаю то же самое в С++, результирующий строковый объект в памяти намного ближе к 2kB.
Чтобы измерить память в Java, я использую Instrumentation. Для С++ я беру длину сериализованного объекта (например, строки).