Размеры экземпляров классов в Android - PullRequest
2 голосов
/ 09 августа 2010

В настоящее время я реализую код обработки изображений для Android. Я знаю об ограничениях памяти и рад их кодированию. Однако я не могу найти никакой документации, которая позволила бы мне определить, сколько байтов используется для каждого экземпляра данного класса, который я мог бы захотеть создать (в куче).

Я опытный программист на C ++ и поэтому относительно компетентен в решении таких проблем с размерами структуры / класса для моего кода C ++ (с учетом ширины пути к данным процессора, проблем с выравниванием платформы и т. Д.). Я знаю, что Java в целом находится на более высоком уровне абстракции, и поэтому я не могу быть в состоянии гарантировать конкретное использование памяти для обычной Java VM. Однако, учитывая, что android работает на другой виртуальной машине, и учитывая, что разработчики сильно ограничены в памяти: я предполагаю, что может существовать относительно детерминированный набор правил для определения, насколько большим будет данный экземпляр объекта, учитывая знание члены.

Кто-нибудь знает эти правила?

Спасибо!

Alex

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Перерасход памяти Dalvikvm совместим с другими основными 32-битными виртуальными машинами, включая HotSpot.

Базовые издержки для каждого объекта в dalvikvm - это два 32-битных слова.К этому вы добавляете два слова для каждого длинного или двойного поля и одно слово для каждого другого поля.Статические поля не учитываются при подсчете.

Могут возникнуть дополнительные издержки, если вы используете идентификатор hashCode, вызывая либо не переопределенный Object.hashCode () , либо System.identityHashCode() .

И при синхронизации на объекте возникают дополнительные затраты памяти.

0 голосов
/ 19 августа 2010

Как отметил Джесси, макет очень похож на виртуальную машину HotSpot.Правила для 32-битной Hotspot можно найти здесь: http://kohlerm.blogspot.com/2008/12/how-much-memory-is-used-by-my-java.html

...