Java 在相同数量的类中使用较少的文件时,性能优势?

Java 在相同数量的类中使用较少的文件时,性能优势?,java,Java,如果我更改源代码的文件数而不更改代码本身的任何内容,那么我的应用程序中是否存在性能差异?我的意思是,例如,如果我把所有的类放在一个文件中,没有新的关系,作为静态类,而不是50个,这会有性能上的好处还是缺点 只是想知道 问题不在于可维护性。我只想知道这是否会提高性能以及原因。据我所知,所有类都会创建不同的*.class文件,而不管它们在代码中的布局如何 因此,任何性能优势都将仅限于编译阶段,因为生成的类/JAR在运行时是相同的 即使在这里,您也不太可能看到显著的性能改进。当然不是那些值得以一种不自

如果我更改源代码的文件数而不更改代码本身的任何内容,那么我的应用程序中是否存在性能差异?我的意思是,例如,如果我把所有的类放在一个文件中,没有新的关系,作为静态类,而不是50个,这会有性能上的好处还是缺点

只是想知道


问题不在于可维护性。我只想知道这是否会提高性能以及原因。

据我所知,所有类都会创建不同的*.class文件,而不管它们在代码中的布局如何

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


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

在编译您的项目时,它可能对编译器的性能产生微不足道的影响。在这之后,它就无关紧要了,因为实际运行的是编译器生成的类文件

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

一旦应用程序启动,类定义就保存在内存中,它们存储在哪里并不重要


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

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


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

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


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

这不会对性能产生任何显著影响,并且会对可维护性产生灾难性影响。无论如何,所有公共类都必须在它们自己的文件中。如果您对性能感到好奇,为什么不从两个方面来衡量呢?运行时间是计算机程序中最容易观察到的事情之一…@JBNizet如前所述,我只是对性能感到好奇。格雷格,在这里提问更快,而不是给自己写一个基准。。。我也在问原因,这是我自己可能不会发现的。我理解,但这个问题很愚蠢。这就像问如果你的腿被割伤,你的车是否会跑得更快。反正你也不会这么做。我不太清楚编译器是如何工作的。。。我不清楚每个类在运行时都会得到一个.class文件,有了这些知识,这是一个合理的问题……是的,它实际上是关于将静态类放在一个封闭的类中。我想,这是在同一个文件中模拟公共存在的最接近的方法。