0

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

就是想...

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

4

4 回答 4

5

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

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

一旦应用程序启动,类定义就会保存在内存中,它们的存储位置无关紧要。

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

于 2012-06-22T10:51:26.950 回答
2

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

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

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

于 2012-06-22T10:51:22.423 回答
1

使用“聪明的类加载”,“大类”将在启动时受到性能影响。特别是如果它是使用Java Web Start之类的东西部署的(它可以根据需要下载、缓存和加载类)。

至于运行时的影响——加载后的性能,我会把它留给其他人。

于 2012-06-22T10:55:11.917 回答
1

这个问题没有实际意义,因为在大多数情况下它是不可能的。您不能将两个公共类放入同一个 .java 文件中(编译器会抱怨)。对于非公共类,这是可能的,但它对为共享相同源文件的那些类生成的字节码没有影响。

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

于 2012-06-22T10:55:50.317 回答