log*_*off 5 osgi classpath permgen
我的项目有一组自定义的注释,可以存在于OSGi 4.3框架中部署的任何bundle中.我想在类路径中找到任何带有这些注释的类.我尝试为找到的每个类使用BundleWiring.listResources(...)和Bundle.loadClass(...).我用一小组bundle做了一些测试,它需要大约200MB的Permanent Generation JVM内存空间,因为所有的类都被加载了.
当程序意识到它们没有这些注释时,有没有办法释放加载的类PermGen内存空间?
有没有更好的方法在OSGi框架中查找带注释的类?
我认为你不应该进行注释扫描,因为它会减慢启动速度并需要大量内存.JEE应用程序服务器在启动时进行注释扫描,使懒惰的程序员感到高兴,结果非常烦人(例如扫描JPA或EJB注释).
我猜你正在实施一种可以定义规则的技术.我建议您应该定义与以下类似的规则:
更好的解决方案是使用具有指定属性的自定义功能命名空间.例如:
Provide-Capability: myNamespace;classes=com.foo.myClass1,com.foo.myClass2
Run Code Online (Sandbox Code Playgroud)
在您的技术中,您应该编写一个调用的BundleTracker:
BundleWiring.getCapabilities("myNamespace");
Run Code Online (Sandbox Code Playgroud)
如果存在名称空间,则可以找到应该处理的类.
如果您实施了该技术,则可以考虑对Bnd进行扩展以自动填充该MANIFEST标头.可以使用该扩展,而不是从命令行或maven等构建工具启动bnd时.
顺便说一句:您可以使用ASM来解析类字节码或使用Java内置的可能性来构建AST.虽然这些可以解决内存问题,但我仍然认为您应该直接在MANIFEST头中定义类列表,因为它使事情更加清晰.您可以阅读MANIFEST标题,您可以检查webconsole上的功能,但不能对字节码执行相同的操作.
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |