OSGi中的隔离

时间:2016-01-15 10:11:28

标签: java osgi

我试图了解OSGi的好处,而我无法理解的是,如果其中一个用户提供的组件崩溃(例如OutOfMemory异常),会发生什么。这个问题是否会被隔离到这个组件,或者整个JVM会崩溃吗?

3 个答案:

答案 0 :(得分:2)

OSGi在类加载器级别隔离组件,并且在JVM级别发生OutOfMemoryError。 OSGi不提供"内存隔离"。简要回答一下:整个JVM都会崩溃。

答案 1 :(得分:2)

OSGi不提供包或组件之间的内存或CPU隔离。 OSGi框架中的所有捆绑包都在Java虚拟机内部运行,而Java本身无法提供这种隔离。 OSGi只能在标准Java架构中做一些事情。

如果您想要更好的隔离,请使用单独的OS进程。但请记住:没有完美隔离这样的东西。如果您作为单独的进程运行,则流氓进程总是有可能取消整个操作系统。即使您在同一数据中心的另一台计算机上运行,​​下次停电或海啸也会影响两台计算机。因此,您必须问自己需要多少隔离,以及需要缓解的具体风险。

对于它的价值,很久以前在Java中尝试提供内存和CPU隔离。这是JSR-121(应用程序隔离API),它从未被Java SE采用。一些供应商(如IBM和Waratek)实施了专有隔离/多租户,但这些并没有流行起来(Waratek后来转向应用程序安全性)。基本上你最终在JVM中实现了一个进程调度程序,当操作系统已经有一个好的时候有什么意义呢?

答案 2 :(得分:0)

OSGi隔离与类解析和类加载有关。 JVM进程本身是共享的。所以OOM异常会影响你的整个容器

如果要运行第三方组件,可能需要创建一个新实例(从根容器管理),它作为一个单独的操作系统进程运行,并带有单独的JVM参数。