`
snoopy7713
  • 浏览: 1127109 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

OSGi类加载机制

 
阅读更多

0. Java’s Virtual Machine, Java Classes, and the CLASSPATH Variable

    Class文件:由字节码组成,字节码文件运行在JVM上;默认情况下是由最后声明、最后加载的

    ClassLoader加载。

    ClassPath: 定位Class文件的位置。

1. Classloader Technology

    类加载技术是基于分层的机制来处理Class文件的,Java集成了三种类型的ClassLoader:

    ■ Bootstrap classloader —Loads classes from the core Java libraries present in the lib

       directory of your java home directory.
    ■ Extension(Sytem) classloader —Loads classes from the lib/ext directory of your Java

       platform or any directory specified in the java.ext.dirs system property.
    ■ Application classloader —Loads classes based on the elements specified in the

       application classpath.

1.1 Traditional use of classloaders in Java

    These three classloaders are linked in a hierarchical relationship. In order to load a class,

    a classloader first asks its parent if it’s able to load the class. If not,it tries to load the class

    itself. This mechanism is used at each classloader level. In this situation,the same

    classloaders are used to resolve all the classes of an application, which makes it difficult

    to isolate the resolution of different classes.

1.2 The classloader inOSGi

    OSGi technology provides a different approach to using classloaders; it’s not based on a

    hierarchical approach but on the concept of classloader chaining(这些ClassLoader是OSGi

    管理的), which allows fined-graine(细粒度) control of the visibility of classes from each other.

    In this context, each component is associated with a dedicated classloader. According to

    the component configuration, this  classloader is linked to other components’ classloaders

    for the resolution of classes outside  the current component. Having classloaders

    dedicated to components makes isolation between  components possible, and, by default,

    no class can be seen outside a component. 

    Instead, you need to explicitly import and export them by configuring the corresponding

    packages in the manifest files.

2. JSR 294—Java module system
    JSR 294 aims to provide a static module system inside Java itself. The JSR is based on a

    similar approach to the OSGi Require-Bundle header but with a greater emphasis on

    language support and the runtime modularity of the JDK itself. JSR 294 doesn’t have the

    same support as OSGi to make different versions of the same class cohabit in the same

    process.

3. OSGi类加载的优点

    (1) Bundle之间可直接共享类,不需要将一个JAR文件提升为一个Parent Class Loader.

    (2) 同一时间可部署同一个类的不同版本,而不冲突。

分享到:
评论

相关推荐

    ClassLoader类加载机制

    类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。

    java类加载器实例

    类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。

    个人搜集的osgi帮助文档,内涵多个pdf

    个人网上搜集的osgi开发文档,内涵OSGi_框架的组件运行机制.pdf,osgi规范中文版.pdf,OSGiSIP通信中间件架构设计.pdf,类加载器特技:OSGi代码生成.doc等

    JVM解毒——类加载子系统

    带着问题,尤其是面试问题的学习才是最高效的。...Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制

    equinox-sdk

    Equinox是OSGI R4的一个实现,Equinox这个项目是由Eclipse 开源组织实现并发布的,也是大名鼎鼎的Java开发工具 Eclipse 的底层机制的实现,如果对Eclipse有点熟悉的话,你就知道Equinox 这个东西是多么的棒了,...

    Java虚拟机

    第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    类加载机制 双亲委派 OSGI 算法 搜索 二分 排序 选择 冒泡 插入 快速 归并 堆 桶 基数 常用算法 贪婪 回溯 剪枝 动态规划 数据挖掘算法 KMP算法 GZZ算法 HASH分桶 关联规则算法 APRORIVE...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 170 第7章 虚拟机类加载机制 / 171 7.1 概述 / 171 7.2 类加载的时机 / 172 7.3 类加载的过程 / 176 7.3.1 加载 / 176 7.3.2 验证 / 178 7.3.3 准备 / 181 7.3.4 解析 / 182 7.3.5 初始化 / 186 7.4 类...

    eclipse插件开发实战

    介绍了eclipse插件开发基本理论、插件...3.介绍OSGi 4.介绍RCP(Rich Client Platform)——Eclipse富客户端 5.介绍插件项目文件结构 6.介绍插件开发过程及基本步骤 7.介绍插件发布jar包的方式 8.给出两个插件开发实例

    java猜数字源码-Android_Interview:Android面试题

    java猜数字源码 ...类加载器 OSGI Https请求慢的解决办法,DNS,携带数据,直接访问IP GC回收策略 画出 Android 的大体架构图 描述清点击 Android Studio 的 build 按钮后发生了什么 大体说清一个应用程序安

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java开源包1

    Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建...

    java开源包11

    Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建...

    java开源包2

    Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建...

    java开源包3

    Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建...

    java开源包6

    Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建...

    java开源包5

    Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建...

    java开源包10

    Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建...

Global site tag (gtag.js) - Google Analytics