我正在学习OSGi,因为它现在变得越来越受欢迎了。我使用linux作为我的操作系统和OpenJDK作为开发环境。我在OSGi equinox框架中创建了一些捆绑包A,B,C ..等等。
我使用以下命令运行OSGi框架:
java -jar osgi-3.10.0-v20140606-1445.jar -console
现在我在OSGi控制台中安装并启动了A,B,C ..等软件包。使用linux top命令我观察到内存和CPU利用率如下:
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
1972 422 root S 368m 74% 3% java -jar osgi-3.10.0-v20140606-1445.jar -console
我观察到我的一个捆绑说B导致了高内存利用率。我从OSGi卸载了捆绑包B,并再次检查了内存使用情况。我发现相同的结果,CPU使用率或内存使用率都没有变化。
我重新启动了没有捆绑B的OSGi框架,然后我找到了以下统计信息
1972 422 root S 214m 43% 0% java -jar osgi-3.10.0-v20140606-1445.jar -console
所以在此之后我才知道在重新启动OSGi框架之前从OSGi卸载bundle B并没有更新内存或CPU使用率。
有人可以建议我,如何在OSGi中卸载软件包后清理内存。
答案 0 :(得分:0)
卸载捆绑包会阻止其他捆绑包连接到它(类加载器管理),但它不会从内存中卸载现有实例或停止这些类中的活动。 要卸载实例,这是正常的Java垃圾收集过程;您需要确保应用程序中没有其他内容持有对实例的引用,然后垃圾收集器将释放实例使用的资源。