我刚为Eclipse安装了Unnecessary Code Detector并在我的项目上运行它。我看到很多所谓的“死代码”。虽然从组织的角度来看,删除死/不必要的代码是有道理的,但它让我想到了:
死代码实际会阻碍Java应用的性能吗?!?!
对我而言,如果代码真的“死”,它永远不会被执行,所以我不知道如何删除它(再次,除了组织/内务/代码清理目的)可以提高性能。
答案 0 :(得分:30)
我认为“死代码”不会妨碍应用程序的性能,但它会阻碍开发性能,这总是更昂贵。
JIT编译器可能会删除此类死代码 - 请参阅dead-code elimination。理论上,如果JIT编译器删除了巨大数量的死代码,它可能会影响初始编译。
但是我怀疑这会在实践中发生,我只建议删除死代码以使开发更容易/更快。
答案 1 :(得分:21)
它可能会影响一些事情......
答案 2 :(得分:4)
它可能会影响它,但JIT编译器应该能够检测并消除从未使用过的方法。即使没有,开销(内存,加载时间,JIT编译时间等)也可能很小。
消除死方法的一个更好的理由是摆脱使你的代码库更难以阅读,测试和维护的“旧东西”。如果这是您可能需要再次使用的代码,则可以始终从版本控制中恢复。
如果我问用户您要拨打哪种方法该怎么办? ,将输入作为String,然后使用反射调用该方法? JIT无法说明将使用哪种方法,因此无法删除任何方法:)。
好点。所以它可能不会在实践中消除方法。 (但它可以......如果类加载器知道从哪里重新加载方法......)
死方法增加了JVM中的方法区域。
是的,尽管内存增加百分比可能微不足道。随之而来的性能降低可能更不重要。
此外,永远不会被调用的方法永远不会被JIT编译,因此您可能不会为典型的实时方法添加50%或更多的内存使用量。
因此过多的死代码会导致从方法区域(堆)中卸载类,这可能会影响应用程序的性能。我是对的吗?
这是不太可能的。只有在没有引用它且其类加载器也无法访问的情况下,才会卸载该类。如果确实发生了,那么类将无法再次使用,所以卸载它是正确的。
答案 3 :(得分:1)
它可能会影响您的应用程序的性能。
修改强>
一种看待它的方法是;死代码将为正在运行的应用程序添加一些额外的内存。因此它也会影响应用程序性能。