如果我更改源代码的文件数量(代码本身没有改变任何内容),我的应用程序是否有任何性能差异?我的意思是,例如,如果我将所有类放在一个文件中(没有新的关系,作为静态类),而不是50,这会有性能优势(或缺点)吗?
只是想知道......
问题不在于可持续性。我只是想知道这是否会提高性能(以及为什么)。
答案 0 :(得分:5)
在构建项目时,它可能会对编译器的性能产生(可忽略的)影响。之后它是无关紧要的,因为实际运行的是编译器生成的类文件。
一个更有趣的问题是,在目录层次结构中使用类文件并将它们放在JAR文件中(再次可以压缩或解压缩)之间是否存在性能差异。将它们放在未压缩的JAR文件中可能是最快的,但这只会影响启动时间,可能不会太多。
应用程序启动后,类定义将保留在内存中,并且存储它们的位置并不重要。
就PHP而言(我猜这个问题来自于),Java总是隐含地使用字节码缓存。
答案 1 :(得分:2)
据我了解,所有类都会导致创建不同的*.class
文件,无论它们是如何在代码中布局的。
因此,任何性能优势仅限于编译阶段,因为生成的类/ JAR在运行时将是相同的。
(即使在这里你也不太可能看到显着/显着的性能改进。当然不是那些以不自然的方式布置你的代码是值得的。只需编写有意义且易于理解的代码,并且信任编译器将其合理地转换为字节码。)
答案 2 :(得分:1)
通过“聪明的类加载”,“大班级”将在初创时遭受性能损失。 尤其是,如果使用Java Web Start(可以下载,缓存和根据需要加载类)进行部署。
关于运行时的影响 - 一旦加载后的性能,我会将其留给其他人。
答案 3 :(得分:1)
这个问题很有道理,因为在大多数情况下,不可能。您不能将两个公共类放入同一个.java文件中(编译器会抱怨)。 对于非公共类,它可能,但它对为共享相同源文件的类生成的字节码具有 no 效果。
如果将多个类作为静态类放入封闭类中,这将导致生成的字节码中的类名更长,但实际类中代码的性能仍然相同。