【问题标题】:Is it possible to estimate performance or cyclomatic complexity from decompiled code?是否可以从反编译的代码中估计性能或圈复杂度?
【发布时间】:2018-05-21 12:24:10
【问题描述】:

假设我有两种算法的替代实现,或两种策略。我当然可以对它们进行基准测试,例如江湖但是我可以通过查看反编译的字节码获得任何信息吗?

一个非常原生的例子是计算 if_* 指令的复杂性或 aload_* 指令的内存消耗。

【问题讨论】:

  • 你说的好像是字节码,不是反编译的代码。
  • 对于CC,有什么意义?如果你有源代码,直接测量它的CC。如果没有,知道 CC 不会帮助您做任何事情。实际上,此时您需要关注正确性而不是易于维护。 (维护不是你关心的......)
  • 对于性能,答案可能是否定的。甚至没有算法复杂度。我想说,分析字节码或反编译代码几乎没有什么收获。
  • 您混淆了几个术语。圈复杂度与您使用 jmh 测量的性能无关,字节码与“反编译代码”无关,aload_ 指令与内存消耗无关,甚至与远程无关。而且,当然,内存消耗和圈复杂度之间没有关系……

标签: java performance bytecode decompiling javap


【解决方案1】:

不,您无法从字节码中获得任何结果。 Javac 根本不会优化您的代码,它与您的 Java 代码几乎相同,只是在字节码表示中。 JIT 将在优化后更改您的所有代码。 如果您查看已编译的 asm 代码,您甚至无法说出代码的性能。衡量它的一种方法 - 运行它。

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2023-03-25
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多