Путаница влияет на производительность?

Запутывание программы Java влияют на ее производительность (исключая переименование вещей)?

8
задан Albus Dumbledore 22 December 2011 в 19:52
поделиться

5 ответов

Нет. Обфускация просто заменяет ваш разумно названный код на безнадежный. В некоторых случаях (например, при использовании ProGuard наш код может быть даже «оптимизирован», удалив все бесполезные блоки кода (например, if (false) и похожие операторы).

РЕДАКТИРОВАТЬ). (чтобы прояснить идеи Магеша).

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

Другая вещь, которую обычно выполняет обфускатор, переименовывает все переменные из mySmartVariable в a $ a $ a , что делает невозможным декомпиляцию (поскольку декомпилятор java считает ] $ как символ, используемый для обозначения внутренних и анонимных классов, а не переменных).

1
ответ дан 5 December 2019 в 12:57
поделиться

Определенно да: за исключением простейшего случая, когда зашифровываются только имена идентификаторов, вопрос только в том, насколько сильно пострадает производительность. Более подробная информация, например здесь , общая информация о методах обфускации доступна в статье Обфусцированный код Википедии.

6
ответ дан 5 December 2019 в 12:57
поделиться

В целом, обфускация путем переименования переменных, методов и имен классов в более бессмысленные имена не влияет на производительность. Некоторые производители программного обеспечения для обфускации даже утверждают, что помимо обфускации, прирост производительности достигает 30%. Хотя я никогда не тестировал эти утверждения, не видел их доказательств и поэтому считаю, что в них трудно поверить.

Однако следует помнить, что некоторые программы также позволяют обфускацию потока: добавление бессмысленных циклов управления к утверждениям, чтобы код было труднее проследить. Это оказывает негативное влияние на производительность, хотя и небольшое.

6
ответ дан 5 December 2019 в 12:57
поделиться

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

0
ответ дан 5 December 2019 в 12:57
поделиться

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

0
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: