首页  

OSGI与Java模块化之路     所属分类 OSGI 浏览量 54
OSGi Open Service Gateway Initiative
Java动态模块化规范

OSGi联盟 最新OSGi定义 The Dynamic Module System for Java
面向Java的动态模块化系统


OSGi规范的演进 OSGi Release 1 (R1) 2000年5月发布 OSGi Release 2 (R2) 2001年10月发布 OSGi Release 3 (R3) 2003年3月发布 OSGi R4 2005年10月发布的核心规范 2006年9月发布的移动设备规范 OSGi R4.1 2007年5月发布 OSGi R4.2 2009年9月 OSGi R4.3 2011年4月核心规范 2012年3月服务纲要规范 OSGi R5 2012年7月
Java模块化规范之争 OSGi 前三个版本 主要领域在移动和嵌入式设备上 OSGi R4开始 尝试进入Java SE/EE领域 2006年,Sun公司离开了当年它一手主导建立的OSGi联盟 Eclipse 3.0 M4版本开始,重构为完全基于OSGi架构 支持Eclipse运行的底层框架 Equinox 成为OSGi R4.x使用最广泛的实现框架 OSGi R4的迅速流行带来一个强烈的信号 Java SE/EE支持模块化已经成为一股不可逆转的潮流,支持模块化的呼声已经强大到令Sun公司不能再忽视的程度。 Sun公司期望能借助JCP的力量重新争夺Java模块化规范的控制权。 2006年10月,由Sun公司提交的JSR-277规范提案(Java Module System,Java模块化系统)发布了第一个早期预览版(Early Draft Review) 2007年年底,Sun带着JSR-277重新加入OSGi联盟 JSR-277是一个全静态的模块化规范 OSGi技术专家、OSGi联盟主席Peter Kriens在OSGi联盟的官方博客上发表文章批评 JSR-277的目标如同儿戏,只能相当于OSGi在8年前的技术水平 IBM将OSGi R4.1提交到JCP成为JSR-291(Dynamic Component Support for Java SE ,Java SE动态组件支持)与JSR-277对抗 sun JSR-277 PK IBM JSR-291 (OSGi R4.1) JSR-291进行表决时,虽然Sun明确投了反对票,但是JSR-291仍然在JCP执委会最终投票中通过 OSGi终于确立了Java唯一的模块化规范的地位 Sun极为重视Java模块化,但它一定要把Java模块化的主导权抓在手中 Java SE 7的模块化 sun 提交的 JSR-294(Improved Modularity Support in the Java Programming Language,Java语言的模块化改进) 试图在Java语言和Java虚拟机层面上对模块化进行支持,直接修改JLS(Java语言规范)和JVMS(Java虚拟机规范), 加入module关键字和超级包(Super Package)等概念。 Sun在提交JSR-294的同时,在OpenJDK中启动了Jigsaw项目的孵化进程 Sun决定让Jigsaw项目采取“SunJDK专有的方式”来实现Java语言模块化 Jigsaw最终在Java 9中发布 , 2015年9月 (OSGi出现的16年之后) 系统要兼容 java8及之前的平台,OSGi是唯一的选择
为什么使用OSGi 为什么不使用OSGi? 这里说的都是缺点 OSGi能让软件开发变得更容易吗 OSGi入门门槛较高,相对陡峭的学习曲线 OSGi本身就具有较高的复杂度,引入OSGi并不能让软件开发变得更容易 OSGi能让系统变得更稳定吗 OSGi框架容易引起的问题 ClassNotFoundException 类加载器死锁 热部署 OutOfMemoryError OSGi能让系统运行得更快吗 OSGi框架对系统性能的损耗 OSGi类加载层次比普通Java应用要深很多,这意味着需要经过更多次的类加载委派才能找到所需的类 在两个互相依赖的模块间发生调用时,可能会由于类加载器互相锁定而产生死锁 要避免死锁的出现,有时候不得不选用有性能损失的串行化的加载策略 OSGi允许不同版本的Package同时存在,会占用更多内存 对OSGi动态性使用不当,可能会因为不正确持有某个过期模块(被更新或卸载的模块)中一个类的实例, 导致该类的类加载器无法被回收,进而导致该类加载器下所有类都无法被GC回收掉 OSGI把Java类加载机制推到了一个不可驾驭的新高度
原文 https://www.cnblogs.com/garfieldcgf/p/6378443.html

上一篇     下一篇
java方法引用实例

Java8 Stream 及 常见坑点

java方法引用

Lambda表达式与匿名内部类的区别

Java方法调用的字节码指令

k8s面试题