【发布时间】:2011-01-28 02:39:28
【问题描述】:
混淆 Java 程序是否会影响其性能(不包括重命名)?
【问题讨论】:
标签: java obfuscation
混淆 Java 程序是否会影响其性能(不包括重命名)?
【问题讨论】:
标签: java obfuscation
绝对是的:除了在最简单的情况下,只有标识符名称被打乱,这只是影响了多少性能的问题。更多详细信息,例如 here,有关混淆技术的一般信息可在 Obfuscated code 维基百科文章中找到。
【讨论】:
一般来说,通过将变量、方法和类名重命名为更无意义的名称来进行混淆不会影响性能。一些混淆软件供应商甚至声称,除了混淆之外,还有高达 30% 的性能提升。尽管我从未测试过这些说法,也从未见过它们得到证实,因此很难相信它们。
但是,请记住,某些软件也启用了流混淆:在语句中添加无意义的控制循环,这样代码就更难理解了。 确实对性能有负面影响,尽管很小。
【讨论】:
没有。混淆只是用不可读的代码替换您合理命名的代码。在某些情况下(例如使用 ProGuard 时,我们的代码甚至可以通过删除所有无用的代码块(例如 if(false) 和相似语句)进行“优化”。
编辑(阐明 Magesh 的想法)。
当使用混淆器(而不是手动混淆,这不是一个好主意)时,它将加载您的类并内联一些方法或代码块(如前面提到的 if)以简化获得的大块代码的代码.因此,方法调用更少,需要更少的堆栈使用,然后固定应用程序。
另一个混淆器通常会将所有变量从mySmartVariable重命名为a$a$a,从而无法反编译(因为java反编译器认为$是用于识别内部类和匿名类的符号,而不是变量)。
【讨论】:
如果您添加永远不会被遍历的冗余代码,则不会。如果您添加在代码的正常执行中必须遍历的逻辑,那么,是的,它会影响性能。软件盗版在多大程度上取决于您试图添加什么不合逻辑的结构来混淆视听。
【讨论】:
有时,是的。在 Java ME(Java 的“手机版”)中,混淆作用于编译后的字节码,并且(除其他外)将名称替换为自动生成的简短名称。这使得字节码更短,至少可以更快地通过网络下载应用程序。
【讨论】: