Рекомендуется ли объединение классов с ProGuard на Android/Dalvik?

Мне только что пришло в голову, что одна из использованных нами оптимизаций кода ProGuard, а именно слияние иерархий классов, возможно, вообще не лучший выбор.

Моя догадка заключалась в том, что было бы полезно объединить классы, чтобы сократить количество вызовов ClassLoader, который, по крайней мере, на JVM является особенно медленной операцией, и в нашем коде мы выбрали множество меньших (часто внутренних) классов, а не большие классы объектов Бога, поэтому ClassLoader будет запускаться относительно часто.

Однако, учитывая крайний (вероятно маловероятный) случай, когда все классы будут объединены в один, даже если загрузчик будет вызван только один раз, мы в конечном итоге загрузим в память тонны кода, который, скорее всего, никогда не будет использован ( Думаю, здесь тоже действует правило 80/20).

Это заставляет меня задуматься:

1) Насколько быстро загружается класс в Dalvik? Стоит ли вообще сокращать эту операцию, используя слияние классов?

2) Тем не менее, вы бы рекомендовали вообще использовать слияние классов на Android?


person Matthias    schedule 04.07.2012    source источник


Ответы (1)


Вертикальное слияние классов сворачивает классы/интерфейсы с их расширениями/реализациями, когда они без необходимости разделены. Это всегда должно быть улучшение (размер и производительность).

Для горизонтального слияния классов я не могу дать общий ответ. База кода будет меньше, но некоторый код, вероятно, может быть загружен слишком быстро или, в крайнем случае, без необходимости.

person Eric Lafortune    schedule 04.07.2012
comment
@вертикальное слияние: просто это значительно усложняет отладку, поскольку трассировки стека будут указывать на строки в суперклассе, когда эти методы на самом деле были определены в подклассе. Есть идеи, как решить эту дилемму? Мы хотели бы иметь хороший баланс между возможностью отладки отчетов об ошибках и небольшим размером приложения. - person Matthias; 04.07.2012
comment
Кроме того, мне все еще интересно, следует ли стараться избегать загрузки классов в Dalvik или это относительно быстрая операция? - person Matthias; 05.07.2012