Как получить размер объекта в памяти в Android или тесты производительности?

Короче говоря, я хочу проверить свою реализацию клона класса android.os.Bundle с этим классом, чтобы увидеть, что лучше. Я уже знаю, что моя версия, вероятно, будет хуже, но я хочу знать,Сколько хуже. Существуют ли какие-либо инструменты для сравнения для Android, которые я могу использовать, чтобы увидеть, какой объект больше в памяти и / или требует больше времени для обработки / хранения значений?

TL; DR:

Я посмотрел на исходный код класса android.os.Bundle, и я нене нравится, как он хранит и возвращает объекты. Он просто хранит их вHashMap а затем приводит к запрошенному объектукласс (какgetString() или жеgetInt()) используя ClassLoader. Я чувствую, что это или любое приведение классов к тому же нарушает безопасность типов и вносит неоднозначность на уровне программирования, что статическая типизация стремится предотвратить, не так ли?

Я хочу создать аналогичный класс контейнера данных, который нене нарушает безопасность типов и нене вводить двусмысленность. Логически простой, но явно неэффективный способ - создать карту для каждого класса, который я хочу сохранить.

То, что я решил, был одинHashMap он содержит сопоставления индекса ключа для ассортимента списков для каждого класса, который я хочу сохранить. Например, звонок вgetString(String key) получит целочисленный индекс, связанный с этим ключом, из карты, если он существует, а затем попытается получить объект по этому индексу в связанном.ArrayList

Единственная двусмысленность здесь будет возвращаться либоnull (где индекс неt существует в списке для этого класса) или неправильный объект правильного класса (где сопоставленный индекс существует, но исходный объект, сохраненный с этим ключом, находится в другом списке), который действительно является программистомответственность за проверку.

Объекты этого класса - только временные контейнеры, используемые для доставки данных из одного места в другое стандартным способом. Oни'не предназначены, чтобы остаться. Oни'также не используются так же, как Bundles, хотя одна из причин, по которой я хочу создать такой унифицированный контейнер данных, состоит в том, чтобы иметь возможность легко преобразовывать вBundleJSONObjectContentValues или жеCursor и назад.

Или, может быть, реальный вопрос: действительно ли все так плохо, или я просто собираюсь приложить максимум усилий, чтобы избежать этого? Я полагаю, что хорошее программирование - это единственный способ избежать двусмысленности в любом случае.

Обновить:

Похоже, Bundle использует Classloader только когдаs распаковывает себя из Parcel, но при каждом вызове put () он вызывает unparcel (). При извлечении он просто приводит к типу, который возвращает метод, внутри блока try-catch дляClassCastException, Тот'Вероятно, самый простой способ сделать это.

Ответы на вопрос(4)

Ваш ответ на вопрос