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

27 java performance dead-code

我刚刚为Eclipse 安装了不必要的代码检测器并在我的项目上运行它.我看到很多所谓的"死代码".虽然从组织的角度来看,删除死/不必要的代码是有道理的,但它让我思考:

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

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

Joe*_*zer 30

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

在可能的情况下,JIT编译器可能会删除这种死代码 - 请参阅死代码消除.理论上,如果JIT编译器删除大量的死代码,它可能会影响初始编译.

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

  • +1开启:"我不认为"死代码"将阻碍应用程序性能,但它会阻碍开发性能,这总是更昂贵." (6认同)

Web*_*net 22

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

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

  • @TicketMonster - 我相信正在运行的应用程序需要保留对象的各种"索引",因此当它们被导入时,它知道它们在那里以及在哪里找到它们.虽然占地面积很小,但取决于你有多少"死代码",它可能会加起来. (2认同)

Ste*_*n C 5

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

消除无效方法的更好理由是摆脱“旧东西”,这会使您的代码库更难以阅读,测试和维护。如果您可能会再次需要此代码,则始终可以从版本控制中将其取回。


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

好点子。因此,它可能不会消除实践中的方法。(但是,如果类加载器知道从何处重新加载方法,则可以...)

死方法会增加JVM中的方法范围。

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

同样,永远不会调用的方法永远不会进行JIT编译,因此对于典型的实时方法,您可能不会确保50%或更多的内存使用量。

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

那是极不可能的。一个类只有在没有引用它并且其类加载器也无法访问的情况下才会被卸载。而且,如果确实发生了该类,则无论如何都不会再次使用该类,因此将其卸载是正确的。