混淆会影响性能吗?

8 java obfuscation

混淆Java程序是否会影响其性能(不包括重命名)?

Tom*_*vic 6

绝对是肯定的:除了最简单的情况,只有标识符名称被扰乱,这只是影响性能的问题.这里有更多细节,关于混淆技术的一般信息可以在混淆代码维基百科文章中找到.


Raz*_*zie 6

通常,通过将变量,方法和类名重命名为更无意义的名称进行模糊处理不会影响性能.一些混淆软件供应商甚至声称除了混淆之外,还有30%的性能提升.虽然我从未测试过这些说法,但从未见过它们,因此很难相信它们.

但是,请记住,某些软件还支持流混淆:在语句中添加无意义的控制循环,因此代码更难以遵循.这确实会对性能产生负面影响,尽管很小.

  • 好的混淆器可以使用goto和其他垃圾生成完全不可读的代码,导致代码很难反编译(好).但这会带来性能损失.看看http://www.excelsior-usa.com/articles/java-obfuscators.html#performance,有趣的阅读. (4认同)

Rid*_*del 1

不会。混淆只是将您合理命名的代码替换为不可读的代码。在某些情况下(例如,使用 ProGuard 时,我们的代码甚至可以通过删除所有无用的代码块(例如if(false)和 类似的语句)来“优化”。

编辑(澄清 Magesh 的想法)。

当使用混淆器(而不是手动混淆,这不是一个好主意)时,它将加载您的类并内联一些方法或代码块(如前面提到的 if)以简化代码以获得大的代码块。因此,方法调用更少,需要更少的堆栈使用,然后紧固应用程序。

混淆器通常会做的另一件事是将所有变量从mySmartVariable重命名为a$a$a,从而无法反编译(因为 java 反编译器将其视为$用于标识内部类和匿名类的符号,而不是变量)。