"dead"代码会妨碍 Java 应用程序的性能吗?



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

死代码真的会影响Java应用程序的性能吗?

对我来说,如果代码真的是"死的",它永远不会被执行,所以我不明白删除它(同样,除了组织/内务管理/代码清理目的)如何能提高性能。

我不认为"死代码"会影响应用程序的性能,但它会影响开发性能,这总是更昂贵。

在可能的情况下,JIT编译器可能会删除这种死代码(参见消除死代码)。我认为,理论上,如果JIT编译器删除了大量的死代码,它可能会影响初始编译。

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

这可能会影响一些事情…

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

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

消除死方法的一个更好的理由是摆脱那些使你的代码库更难阅读、测试和维护的"旧东西"。如果这是您可能再次需要的代码,您总是可以从版本控制中获得它。


如果我问用户你想调用哪个方法呢?,将输入作为String,然后使用反射调用该方法。JIT不能说将使用哪个方法,所以它不能删除任何方法:)。

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

失效方法增加了JVM中的方法面积。

是的,尽管内存增加的百分比可能微不足道。而由此导致的性能下降可能更不显著。

而且,一个从未被调用的方法将永远不会被JIT编译,所以对于一个典型的活动方法,您可能不会导致50%或更多的内存使用。

所以太多的死代码可能会导致从方法区(堆)卸载类,这可能会影响应用程序的性能。

这是极不可能的。一个类只有在没有任何引用它并且它的类加载器也不可达的情况下才会被卸载。如果确实发生了,类将不会再被使用,所以卸载它是正确的。

这会影响应用程序的性能。

编辑

一种看待它的方法是;死代码会给正在运行的应用程序增加一些额外的内存。所以它也会影响应用程序的性能。

相关内容

  • 没有找到相关文章

最新更新