在相同数量的类中使用较少的文件时,性能是否有益?

时间:2012-06-22 10:47:42

标签: java

如果我更改源代码的文件数量(代码本身没有改变任何内容),我的应用程序是否有任何性能差异?我的意思是,例如,如果我将所有类放在一个文件中(没有新的关系,作为静态类),而不是50,这会有性能优势(或缺点)吗?

只是想知道......

问题不在于可持续性。我只是想知道这是否会提高性能(以及为什么)。

4 个答案:

答案 0 :(得分:5)

在构建项目时,它可能会对编译器的性能产生(可忽略的)影响。之后它是无关紧要的,因为实际运行的是编译器生成的类文件。

一个更有趣的问题是,在目录层次结构中使用类文件并将它们放在JAR文件中(再次可以压缩或解压缩)之间是否存在性能差异。将它们放在未压缩的JAR文件中可能是最快的,但这只会影响启动时间,可能不会太多。

应用程序启动后,类定义将保留在内存中,并且存储它们的位置并不重要。

就PHP而言(我猜这个问题来自于),Java总是隐含地使用字节码缓存。

答案 1 :(得分:2)

据我了解,所有类都会导致创建不同的*.class文件,无论它们是如何在代码中布局的。

因此,任何性能优势仅限于编译阶段,因为生成的类/ JAR在运行时将是相同的。

(即使在这里你也不太可能看到显着/显着的性能改进。当然不是那些以不自然的方式布置你的代码是值得的。只需编写有意义且易于理解的代码,并且信任编译器将其合理地转换为字节码。)

答案 2 :(得分:1)

通过“聪明的类加载”,“大班级”将在初创时遭受性能损失。 尤其是,如果使用Java Web Start(可以下载,缓存和根据需要加载类)进行部署。

关于运行时的影响 - 一旦加载后的性能,我会将其留给其他人。

答案 3 :(得分:1)

这个问题很有道理,因为在大多数情况下,不可能。您不能将两个公共类放入同一个.java文件中(编译器会抱怨)。 对于非公共类,它可能,但它对为共享相同源文件的类生成的字节码具有 no 效果。

如果将多个类作为静态类放入封闭类中,这将导致生成的字节码中的类名更长,但实际类中代码的性能仍然相同。