我有一个在大型Java项目中查找未使用('死')方法的想法,但我需要帮助来推导实现。
由于步骤2和4可以离线进行,我实际上只是寻求步骤1的帮助。
具体来说,如何记录方法执行时?我想如果我尝试任何类型的内存存储,我很快就会遇到OutOfMemoryErrors。同样,如果我将数据存储在数据库/文件系统中,则调用量可能会导致严重的性能问题。有没有人做过类似的事情?任何意见/建议表示赞赏。
答案 0 :(得分:1)
答案 1 :(得分:0)
嗯,你想要一个前呼叫建议。根据该建议,您需要记录被调用的方法。可能你想要保留一组调用的方法,这样你就不会重复了。您可以从 thisJointPoint 中获取当前方法。我可以为它提供AspectJ代码,但我认为它不是重点。
我认为你最好只使用工具来解析使用BECL或ASM的二进制.class文件,从你知道调用的方法开始,并构建一个调用图。这类似于JVM进行垃圾收集的方式。
但是,你应该问问自己这是什么。是性能吗?因为影响应该是没有的。如果你想减小.class文件的大小,你最好使用像ProGuard这样的东西。这将解决这个和其他问题及其已经发生的问题。
那就是说,如果你真的想这样做,我认为最好的方法是使用Cobertura来测试你的代码,并对你的应用程序进行一次运行,然后查看你的覆盖率报告。花费90%的已用代码不应该花很长时间。可以删除而不会导致编译错误的任何未调用方法都是死代码。