我有一个Java OSGI应用程序,似乎每次运行时都会创建OSGI缓存目录并包含300M(主要是JAR),并在应用程序关闭时被清理。 它会导致性能问题(冗余 IO 操作)。
有没有办法在多次运行中使用同一目录? 我们可以在不创建这个目录的情况下运行吗?
谢谢
最佳答案
首先,这是您使用的管理代理的问题。管理代理负责安装、更新和卸载 bundle 。例如,Karaf 有一个基于 maven 的管理代理,bnd 有自己的启动器,该启动器具有可执行 jar 方法作为管理代理。因此,您需要首先了解管理代理的工作原理。
在这方面,OSGi 确实提供了管理代理可以利用的机制。
- 通过引用 – 通常,通过向 OSGi 框架提供 URL 来安装 bundle 。如果此 URL 是
file:
url 并以reference:
为前缀,则框架将通过引用安装 bundle 。默认情况下,框架将包的 jar 复制到内部缓存。 (最近 bnd 的启动器可以创建通过引用安装的可执行 JAR。) org.osgi.framework.storage.clean
– 此系统属性控制是否清理缓存区域。如果将其设置为none
,则不会闪烁任何内容。如果设置为onFirstInit
,每次启动框架时它都会清除。
如前所述,您需要了解谁是您的管理代理的详细信息才能正确优化此操作。
关于java - OSGI缓存目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615105/