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) 同一时间可部署同一个类的不同版本,而不冲突。
相关推荐
总结,JVM 类加载机制是Java平台的核心特性之一,它确保了程序的稳定运行和动态扩展能力。理解类加载器的工作原理和双亲委派模型对于优化程序性能、解决类冲突以及构建复杂的模块化系统至关重要。在实际开发中,掌握...
- Tomcat作为流行的Java Web服务器,有自己的类加载机制。它包括Web应用程序类加载器,用于加载特定Web应用的类,以及全局类加载器,用于共享所有应用的类。这种设计允许Web应用独立更新而不影响其他应用。 5. 类...
OSGi框架的核心优势在于实现类资源的动态加载、更新和卸载,这一过程常被称为热插拔技术。 OSGi定义了模块化编程的概念,它将程序分为若干个Bundle(通常是jar包),这些Bundle可以独立地被安装、启动、升级和卸载...
类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。
Java 类加载机制是Java语言的核心特性之一,它允许程序在运行时动态地加载和执行类。这个机制在Java 1.0版本时引入,最初是为了支持Java Applet,即可以在Web浏览器中运行的小型Java应用程序。随着时间的发展,类...
Java 类加载机制是Java技术体系中的重要组成部分,它关乎到程序运行时的类查找与实例化。当遇到`java.lang.ClassNotFoundException`异常时,通常是因为类加载过程出现了问题。了解类加载机制对于解决这类问题至关...
而在OSGi这样的模块化环境中,ClassLoader机制得到了进一步的发展,实现了更加精细的类加载控制和更好的模块隔离。理解并掌握ClassLoader的工作原理和在OSGi中的应用,对于开发高效、可扩展的Java应用程序至关重要。
2. **类加载器调整**:由于Tomcat和OSGI都有自己的类加载机制,整合时需要调整Tomcat的类加载策略,以兼容OSGI的模块化特性。这可能涉及创建一个新的类加载器,用于加载OSGI Bundle内的类。 3. **配置管理**:OSGI...
- **移动应用**:对于资源有限的移动设备而言,OSGi的高效管理机制非常有用。 - **富互联网应用(RIA)**:在RIA开发中,OSGi帮助开发者构建高度模块化的前端应用。 #### OSGi在企业开发中的价值 自1999年成立以来...
- **从树到图**:传统的类加载机制是基于类路径的树状结构,而OSGi采用的是基于依赖关系的图状结构,这提高了灵活性。 - **信息隐藏**:OSGi中的每个模块(称为“bundle”)都拥有自己的命名空间,可以控制对外暴露...
在OSGi(Open Service Gateway Initiative)环境中配置Spring事务可能会遇到一些挑战,因为OSGi的模块化特性使得依赖管理和类加载机制与传统的Java应用不同。这篇博客文章“解决osgi spring 事务配置问题”可能深入...
1. **OSGI类加载机制**:理解OSGI的类加载模型是关键,因为每个bundle有自己的类加载器,这可能导致类冲突或者无法共享。extKamon通过导出Kamon所需的包,确保了不同bundle间正确地共享Kamon的类。 2. **Bundle依赖...
3. **类加载器特技:OSGi代码生成**:"类加载器特技:OSGi代码生成.doc"可能探讨了OSGi如何利用其独特的类加载机制来实现动态代码生成和修改。由于每个bundle都有自己的类加载器,开发者可以创建在运行时动态生成或...
4. **类加载器**:每个bundle有自己的类加载器,负责加载bundle内的类,避免类冲突。 5. **Repository**:存储bundle信息的地方,bundle可以从其中获取依赖的bundle。 ### OSGi的应用场景: 1. **嵌入式系统**:...
在Java中,类加载器和类加载机制是非常重要的概念,它们使得Java具备了动态加载和热部署的能力,极大地提高了程序的灵活性。类加载器负责将.class文件加载到Java虚拟机中,并生成对应的java.lang.Class对象,以便JVM...
3. **类加载器**: OSGI使用分层的类加载机制,每个bundle有自己的类加载器,处理类的加载和隔离。 4. **服务**: OSGI服务是提供给其他bundle使用的一组接口和实现。服务可以通过服务注册表进行注册和查找。 5. **...
- Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求时,它首先会将请求委托给父类加载器。只有当父类加载器无法找到对应的类时,子类加载器才会尝试加载。这种设计有助于避免类的重复加载,...
首先,"OSGi R4核心规范文档"是理解OSGI机制的基础,R4代表了OSGI的第四代版本。该规范定义了OSGI框架的基础架构,包括模块系统、生命周期管理、服务注册与发现等核心概念。模块系统(Bundle)是OSGI的核心,它允许...
- 模块系统:详述OSGi的包和类加载机制,以及如何定义和管理模块(也称为bundle)。 - 依赖管理:解释如何声明和解决模块间的依赖关系,确保正确地加载和启动服务。 - 动态性:介绍如何在运行时安装、启动、停止...
OSGi的类加载机制允许多个bundle有自己的类加载器,避免了传统的Java类加载问题,如类冲突和类版本控制。每个bundle都有独立的类加载器,只加载自己包含的类,需要外部类时通过服务机制获取。 **服务注册表...