Влияет ли запутывание на производительность? - PullRequest
8 голосов
/ 16 марта 2010

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

Ответы [ 5 ]

6 голосов
/ 16 марта 2010

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

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

6 голосов
/ 16 марта 2010

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

1 голос
/ 16 марта 2010

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

РЕДАКТИРОВАТЬ (для разъяснения идей Магеша).

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

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

0 голосов
/ 16 марта 2010

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

0 голосов
/ 16 марта 2010

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

...