Ответ 1
Существует несколько причин (я являюсь автором http://code.google.com/p/fast-serialization/)
Причины:
- обход иерархии классов для каждого объекта, выполняющего несколько вызовов для чтения/записи объекта на объект в случае.
- Частично плохое кодирование (улучшено с 1.7)
- Некоторые часто используемые классы используют старые медленные + устаревшие функции сериализации, такие как putfield/getfield и т.д.
- Слишком много временных распределений объектов
- Много проверок (версии, реализованные интерфейсы)
- медленные потоки ввода/вывода Java
- Отражение для установки/получения значений поля.
- использование коллекций JDK, требующих "больших чисел", таких как Integer или Long вместо примитивов. В реализации
- отсутствуют определенные алгоритмические оптимизации: -)
- примитивы переупорядочиваются в сетевой порядок байтов (в java-коде, а не native) на x86.
Чтобы повысить производительность, им пришлось отказаться от поддержки старых схем управления версиями (например, способ, которым в настоящее время работает read/writeObject, является субоптимальным) и сделать некоторые вещи, такие как поддержка версий, необязательными или выбрать более чувствительные к производительности подходы к что (возможно). Кроме того, HotSpot может добавить некоторые встроенные функции для улучшения обработки примитивов с низким уровнем. Нужно иметь представление о производительности при разработке API, что, вероятно, не относится к сериализации JDK.