“死”代码是否会阻碍Java应用程序的性能?

时间:2013-04-29 14:23:25

标签: java performance dead-code

我刚为Eclipse安装了Unnecessary Code Detector并在我的项目上运行它。我看到很多所谓的“死代码”。虽然从组织的角度来看,删除死/不必要的代码是有道理的,但它让我想到了:

死代码实际会阻碍Java应用的性能吗?!?!

对我而言,如果代码真的“死”,它永远不会被执行,所以我不知道如何删除它(再次,除了组织/内务/代码清理目的)可以提高性能。

4 个答案:

答案 0 :(得分:30)

我认为“死代码”不会妨碍应用程序的性能,但它会阻碍开发性能,这总是更昂贵。

JIT编译器可能会删除此类死代码 - 请参阅dead-code elimination。理论上,如果JIT编译器删除了巨大数量的死代码,它可能会影响初始编译。

但是我怀疑这会在实践中发生,我只建议删除死代码以使开发更容易/更快。

答案 1 :(得分:21)

它可能会影响一些事情......

  • 应用程序的大小
  • 应用程序运行时使用的内存
  • 打包扫描的性能下降(如果适用)

答案 2 :(得分:4)

它可能会影响它,但JIT编译器应该能够检测并消除从未使用过的方法。即使没有,开销(内存,加载时间,JIT编译时间等)也可能很小。

消除死方法的一个更好的理由是摆脱使你的代码库更难以阅读,测试和维护的“旧东西”。如果这是您可能需要再次使用的代码,则可以始终从版本控制中恢复。


  

如果我问用户您要拨打哪种方法该怎么办? ,将输入作为String,然后使用反射调用该方法? JIT无法说明将使用哪种方法,因此无法删除任何方法:)。

好点。所以它可能不会在实践中消除方法。 (但它可以......如果类加载器知道从哪里重新加载方法......)

  

死方法增加了JVM中的方法区域。

是的,尽管内存增加百分比可能微不足道。随之而来的性能降低可能更不重要。

此外,永远不会被调用的方法永远不会被JIT编译,因此您可能不会为典型的实时方法添加50%或更多的内存使用量。

  

因此过多的死代码会导致从方法区域(堆)中卸载类,这可能会影响应用程序的性能。我是对的吗?

这是不太可能的。只有在没有引用它且其类加载器也无法访问的情况下,才会卸载该类。如果确实发生了,那么将无法再次使用,所以卸载它是正确的。

答案 3 :(得分:1)

它可能会影响您的应用程序的性能。

修改

一种看待它的方法是;死代码将为正在运行的应用程序添加一些额外的内存。因此它也会影响应用程序性能。