OSGi和性能?

Mic*_*che 4 java performance osgi

OSGi适合高性能应用服务器?

OSGi有助于生成高度模块化的应用程序,但由于执行模型与常规Java应用程序不同(因为我了解OSGi应用程序在特定平台上运行,因此对性能的影响Apache Felix).

您在性能方面的不同实现有哪些经验?

谢谢

Dan*_*ell 8

根据我的经验,将应用程序从非OSGi移动到OSGi环境(使用Felix)对性能没有任何影响.我生产的每个建筑都经过压力测试; 压力测试的结果表明性能没有下降.

它可能取决于您的应用程序的功能.我会对显式的 OSGi概念(例如服务)进行折扣,因为这样的新代码需要您自己的测试,我假设您正在询问对现有POJO代码的影响.

OSGi环境的隐含影响主要是类加载.您可能知道,OSGi要求为每个捆绑包分别使用类加载器,并提供一种将捆绑中的代码连接到其他捆绑包中的依赖项的方法.当bundle中的一个类调用另一个bundle中的一个类时,它是第二个bundle的类加载器,它负责加载第二个类.

可能是(但可能不会),这个类加载逻辑消耗比在香草的Java环境中使用默认的类加载一些额外的工作.但是,除非您的代码本身不断重新创建和重新加载类,这是不可能的,否则任何性能影响都可能忽略不计.无论如何,这只是理论上的可能性.这取决于您选择的实施尽可能高效.

对内存占用也有很小的影响.最好采用堆转储并使用像mat这样的东西来分析它.

你会花更多的时间从概念上了解OSGi,OSGi容器,工具,版本管理之间的差异以及等待类加载的不同,相信我;)

  • OSGi中有更多类加载器的事实并不一定意味着它会变慢.实际上,如果你遵循思想过程,每个bundle都有它自己的类加载器,那么它也意味着每个bundle只需要从一小部分资源中执行类加载器查找,这些资源比(小)数量级小于传统的java类路径大小.每个包应该能够非常快速地完成类加载,因此在考虑性能时很难使用"许多类加载器"arg作为缺点.每个捆绑包实际上都要灵活得多. (2认同)

Nei*_*ett 5

由于更快的类加载,OSGi可以导致非常小的性能提升.由于多个类加载器,它还可能导致内存消耗的极小增加.

与您的问题中的断言相反:OSGi不会更改Java执行模型.