在JVM中加载数千个类会影响方法执行的性能

时间:2016-02-01 16:15:14

标签: java performance jvm

我创建了一个Bean让我们说

  

com.session.implementation.MathOperationBean

并且在MathOperationBean中可以说方法add

现在在我现在的公司中,需要再创建一个这样的Bean文件(这是一个很长的故事,因此无法解释为什么还需要一个Bean)让我们将Bean称为

  

com。 v1_0 .session.implementation.MathOperationBean //(包不同)

仅供参考 v1_0 是版本号。

因此,Bean文件的数量是双倍,方法数量增加一倍。并且将有数千个bean文件用于将在JVM中加载的版本。

我的问题是: 在JVM中加载这些bean文件会降低那些bean中方法执行的性能吗?

1 个答案:

答案 0 :(得分:1)

一般来说,没有。

JVM非常懒惰,并且将避免加载或执行未使用的代码路径。因此,如果您的类路径上有一千个类,但您的应用程序只使用其中十个类,那么通过将类路径显式限制为十个使用的类,您将看不到(大部分)改进。通常,让JVM弄清楚它需要什么是安全的;它可能比你聪明。

您可以轻松地对此进行试验 - 在类路径中添加一些包含大量类的库,然后重新运行您的应用程序。您应该看到性能没有差异。

更重要的是,调用特定方法的效率与JVM加载的类数之间没有关系。与散列表保持为O(1)的方式相同,无论它有多大,都应该(有效地)根据正在加载的类的数量对执行时间没有影响。

正如@EJP所指出的那样,使用更多内存的应用程序存在系统范围的成本,但这种成本是次线性的(操作系统和JVM都会在可能的情况下进行优化)所以这不是我花费的东西。除非你有理由相信它是一个瓶颈,否则很多时候都会担心。

版本化软件包没有什么特别之处;通过它的声音,仍然为每个bean加载了固定数量的类,这意味着每个方法调用最多只有固定的开销。

正如评论员所指出的那样,你所描述的包结构存在代码质量问题,但性能不太可能成为一个大问题。