Eclipse插件Lazy Start实现原理分析 - 编程入门网
Eclipse插件Lazy Start实现原理分析时间:2011-08-13 朱兴每次提到有关Eclipse插件启动的问题的时候,脑子中自然的反应就是:可以设定为预先启动 (org.eclipse.ui.startup),否则默认的情况下是懒启动(Lazy Start),只有当插件中的功能被真正 调用的时候,插件才会被启动。可能是人也跟着变懒了,也一直没有去留心Eclipse底层是怎么实现这种 懒加载的,只是有个大致的猜测,估计又是用hook机制了。昨天闲着具体看了一下实现,果然是类似的实 现。下面就大致和大家分享一下,说的不一定准确,仅供参考 ~_~。 直接进入主题,我们的Eclipse实例启动肯定要构造工作区,那么ResourcesPlugin肯定会被启动,我 们就在ResourcesPlugin.startup方法设置一个断点,调试栈如下: 假设我们对插件类型加载细节不知道,猜测大致过程如下: 1、DefaultClassLoader加载类型(org.eclipse.core.resources.IContainer) 2、EclipseLazyStarter.preFindLocalClass 3、启动资源插件:ResourcesPlugin.startup Eclipse插件Lazy Start实现原理分析(2)时间:2011-08-13 朱兴补充说明: 1、org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader是Eclipse针对OSGI类加载实现的 核心角色,也是eclipse插件默认的类加载器类型,当然,每个插件有自己独立的类加载器实例来负责类 型加载。 2、DefaultClassLoader、BundleLoader、ClasspathManager三者协作,处理类型加载请求(为什么一 个类加载过程要搞的这么复杂呢?Eclipse的考虑是什么呢? 大家思考吧~_~) 【EclipseLazyStarter调用分析】 我们先大致看一下EclipseLazyStarter.preFindLocalClass方法的代码实现:
加载类型之前为什么要给回调一下EclipseLazyStarter. preFindLocalClass,又hook了?我们看了一 下EclipseLazyStarter继承了ClassLoadingStatsHook接口,ClassLoadingStatsHook接口的类型API文档 说明了它的作用: A ClassLoadingStatsHook hooks into the <code>ClasspathManager</code> class. 追踪前面的调用栈,ClassLoadingStatsHook是在ClasspathManager.findLocalClass中被调用的:
Eclipse插件Lazy Start实现原理分析(3)时间:2011-08-13 朱兴再接着往下看之前,我们大致已经知道来的Eclipse的插件lazy start是怎么回事了: EclipseLazyStarter hook到了插件类加载器的类型加载过程中了,在类型被加载之前会回调 EclipseLazyStarter. preFindLocal |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |