混淆会影响性能吗?

时间:2010-03-16 13:08:05

标签: java obfuscation

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

5 个答案:

答案 0 :(得分:6)

绝对是肯定的:除了最简单的情况,只有标识符名称被加扰,这只是影响性能的问题。更多详细信息,例如here,有关混淆技术的一般信息,请参阅Obfuscated code维基百科文章。

答案 1 :(得分:6)

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

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

答案 2 :(得分:1)

没有。混淆只是用难以理解的代码替换你明智的命名代码。在某些情况下(作为使用ProGuard的示例,我们的代码甚至可以通过删除所有无用的代码块(例如if(false)和类似的语句)来“优化”。)

编辑(澄清Magesh的想法)。

当使用混淆器(并且不用手工混淆,这不是一个好主意)时,它会加载你的类并内联一些方法或代码块(如前面所述),以简化获得的大块代码的代码。因此,方法调用较少,需要较少的堆栈使用,然后紧固应用程序。

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

答案 3 :(得分:0)

如果添加无法遍历的冗余代码,请执行。如果添加必须在代码的正常执行中遍历的逻辑,那么,是的,它将影响性能。多少取决于你试图混淆的不合逻辑的结构是软件盗版。

答案 4 :(得分:0)

有时,是的。在Java ME(Java的“移动电话版本”)中,混淆对编译的字节代码起作用,并且(除其他外)用自动生成的短代码替换名称。这使字节代码更短,这至少使通过网络下载应用程序更快。