关于ClassLoader

Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点:

 

1、JVM的内存管理

 

理解了这一点,所有和对象相关的问题统统都能解决

 

2、JVM Class Loader

 

理解了这一点,所有和Java相关的配置问题,包括各种App Server的配置,应用的发布问题统统都能解决

 

App Class Loader

|----- EJB Class Loader

|----- Web App Class Loader

 

如果在App Class Loader级别配置,是全局可见的。如果打包在EJB里面,那么就不会影响到Web Application,反之亦然,如果你在WEB-INF下面放置Hibernate,也不会影响到EJB。放在EJB Class Loader或者放在Web App Class Loader级别主要就是在局部范围内有效,不影响到其它的应用。

 

试想,如果在一个Weblogic上面配置多个虚拟域,你使用www.bruce.com域名,开发你的网站,我使用www.fankai.com开发我的网站,那么当然不希望我们的Hibernate相互干扰,所以就可以放在 EJB Class Loader级别来配置Hibernate。

 

进一步阐述一下EJB Class Loader的问题:

 

先再次强调一下,Hibernate和EJB,和App Server不存在兼容性问题,他们本来就是不相关的东西,就好像JDBC,相信没有人会认为JDBC和EJB不兼容吧,Hibernate也是一样,它只和JDBC驱动,和数据库有兼容性问题,而和EJB,和App Server完全是不搭界的两回事。凡是认为Hibernate和EJB不兼容的人,其实是都是因为对EJB学习的不到家,把责任推到Hibernate身上了。

 

我前面提到过Class Loader的层次,这里不重复了,总之我们先来看看Class Loader的作用范围:

 

((Boot Strap)) Class Loader:

load JRE\lib\rt.jar, sunrsasign.jar, charsets.jar, jce.jar, jsse.jar, plugin.jar

Ext Class Loader:

load JRE\lib\ext目录下的库文件, load JRE\classes目录下的类

App Class Loader:

load CLASSPATH变量指定路径下的类

 

以上的load路径都是写死在JVM的C++源代码里面的,不能改变,详细请见王森的《Java深度历险》

 

在一个特定的App Server上,Class Loader会继续向下继承,继承的层次会根据不同的App Server有所不同,但是肯定不会变的就是:

 

EJB Class Loader:

 

继承自App Class Loader,继承层次根据App Server有所不同,一个EJB Class Loader它的load Class的范围仅限于JAR或者EAR范围之内。

 

Web App Class Loader:

 

继承自App Class Loader,继承层次根据App Server有所不同,一个Web App Class Loader:它的load Class的范围在 WEB-INF\lib下的库文件和WEB-INF\classes目录下的class文件。

 

Web App Class Loader很好理解,大家毕竟用的很多,App Server上的一个Web Application会创建一个Web App Class Loader的实例去负责load class,所以如果你想让Hibernate只在这个Web Application内生效,把它放到WEB-INF\lib下去就好了。

 

如果你把Hibernate放到了CLASSPATH变量指定的路径下,而你在WEB-INF\lib也放了一份,那么Web App Class Loader由于load范围所限,它会首先找到WEB-INF\lib下的那份Hibernate,按照它的配置来初始化Hibernate。

 

如果你把Hibernate放到了CLASSPATH变量指定的路径下,但你在WEB-INF\lib什么都没有放,那么Web App Class Loader由于load范围所限,它根本什么都找不到,于是它把load Hibernate的责任交给上一级的Class Loader,这样直到App Class Loader,它找到了Hibernate,按照它的配置来初始化Hibernate。

 

EJB Class Loader稍微复杂一点,不那么容易理解。App Server会针对每一个EJB包文件创建一个EJB Class Loader的实例,例如:

 

((Hello Robbin)).jar

((Hello Bruce)).jar

 

当你把这两个jar发布到App Server上以后,会创建两个EJB Class Loader的实例,分别去load这两个EJB包,比如说:

 

CLEJB_Robbin是load ((Hello Robbin)).jar的

CLEJB_Bruce是load ((Hello Bruce)).jar的

 

那么CLEJB_Robbin的load范围就仅仅限于HelloRobbin.jar之内,它load不到HelloRobbin.jar之外的任何文件,当然它也load不到HelloBruce.jar。

 

说到这里,我相信大家应该已经明白为什么EJB规范不允许EJB有IO操作了吧?因为EJB Class Loader根本找不到jar包之外的文件!!!

 

如果现在你想实现HelloRobbin.jar和HelloBruce.jar的互相调用,那么该怎么办?他们使用了不同的EJB Class Loader,相互之间是找不到对方的。解决办法就是使用EAR。

 

现在假设HelloRobbin.jar和HelloBruce.jar都使用了Hibernate,看看该怎么打包和发布:

 

HelloEJB.ear

 

|------ ((Hello Robbin)).jar

|------ ((Hello Bruce)).jar

|------ Hibernate2.jar

|------ pojo.jar (定义所有的持久对象和hbm文件的jar包)

|------ cglib-asm.jar

|------ commons-beanutils.jar

|------ commons-collections.jar

|------ commons-lang.jar

|------ commons-logging.jar

|------ dom4j.jar

|------ odmg.jar

|------ log4j.jar

|------ jcs.jar

|------ Hibernate.properties

|------ log4j.properties

|------ cache.ccf

|------ META-INF\application.xml (J2EE规范的要求,定义EAR包里面包括了哪几个EJB)

 

除此之外,按照EJB规范要求,HelloRobbin.jar和HelloBruce.jar还必须指出调用jar包之外的类库的名称,这需要在jar包的manifest文件中定义:

 

((Hello Robbin)).jar

|------ META-INF\MANIFEST.MF

 

MANIFEST.MF中必须包括如下一行:

 

Class-Path: log4j.jar hibernate2.jar cglib-asm.jar commons-beanutils.jar commons-collections.jar commons-lang.jar

commons-logging.jar dom4j.jar jcs.jar odmg.jar jcs.jar pojo.jar

 

这样就OK了,当把HelloEJB.ear发布到App Server上以后,App Server创建一个EJB Class Loader实例load EAR包里面的EJB,再根据EJB的jar包里面的MANIFEST.MF指出的Class-Path去寻找相应的jar包之外的类库。

 

所以一个EAR包有点类似一个Web Application,EJB Class Loader的load范围也就是EAR范围之内,它load不到EAR之外的文件。除非把Hibernate定义到CLASSPATH指定的路径下,在这种情况下,EJB Class Loader找不到Hibernate,只能交给上一级的Class Loader,最后由App Class Loader找到Hibernate,进行初始化。

 

由于EAR这样load Class规则,假设Robbin和Bruce都在同一个Weblogic上运行自己的网站,而我们都不希望自己的程序里面的Hibernate配置被对方的搞乱掉,那么我们就可以这样来做:

 

Robbin's Website:

 

Robbin.ear

 

|-------- robbin.war (把Web Application打包)

|-------- robbin.jar (把开发的EJB打包)

|-------- Hibernate2.jar

..........................

|-------- META-INF\application.xml

 

Bruce's Website:

 

Bruce.ear

|-------- bruce.war (把Web Application打包)

|-------- bruce.jar (把开发的EJB打包)

|-------- Hibernate2.jar

..........................

|-------- META-INF\application.xml

 

这样在同一个App Server上运行,就可以互相不干扰。

 

#################################################

richardluo 发表自dev2dev@bea

 

了解ClassLoader

1, 什么是 ClassLoader?

Java 程序并不是一个可执行文件,是需要的时候,才把装载到 JVM中。ClassLoader 做的工作就是 JVM 中将类装入内存。 而且,Java ClassLoader 就是用 Java 语言编写的。这意味着您可以创建自己的 ClassLoader

ClassLoader 的基本目标是对类的请求提供服务。当 JVM 需要使用类时,它根据名称向 ClassLoader 请求这个类,然后 ClassLoader 试图返回一个表示这个类的 Class 对象。 通过覆盖对应于这个过程不同阶段的方法,可以创建定制的 ClassLoader。

2, 一些重要的方法

A) 方法 loadClass

ClassLoader.loadClass() 是 ClassLoader 的入口点。该方法的定义如下:

Class loadClass( String name, boolean resolve ;

name JVM 需要的类的名称,如 Foo 或 java.lang.Object。

resolve 参数告诉方法是否需要解析类。在准备执行类之前,应考虑类解析。并不总是需要解析。如果 JVM 只需要知道该类是否存在或找出该类的超类,那么就不需要解析。

 

B) 方法 defineClass

defineClass 方法是 ClassLoader 的主要诀窍。该方法接受由原始字节组成的数组并把它转换成 Class 对象。原始数组包含如从文件系统或网络装入的数据。defineClass 管理 JVM 的许多复杂、神秘和倚赖于实现的方面 -- 它把字节码分析成运行时数据结构、校验有效性等等。不必担心,您无需亲自编写它。事实上,即使您想要这么做也不能覆盖它,因为它已被标记成final的。

 

C) 方法 findSystemClass

findSystemClass 方法从本地文件系统装入文件。它在本地文件系统中寻找类文件,如果存在,就使用 defineClass 将原始字节转换成 Class 对象,以将该文件转换成类。当运行 Java 应用程序时,这是 JVM 正常装入类的缺省机制。(Java 2 中 ClassLoader 的变动提供了关于 Java 版本 1.2 这个过程变动的详细信息。) 对于定制的 ClassLoader,只有在尝试其它方法装入类之后,再使用 findSystemClass。原因很简单:ClassLoader 是负责执行装入类的特殊步骤,不是负责所有类。例如,即使 ClassLoader 从远程的 Web 站点装入了某些类,仍然需要在本地机器上装入大量的基本 Java 库。而这些类不是我们所关心的,所以要 JVM 以缺省方式装入它们:从本地文件系统。这就是 findSystemClass 的用途。

 

D) 方法 resolveClass

正如前面所提到的,可以不完全地(不带解析)装入类,也可以完全地(带解析)装入类。当编写我们自己的 loadClass 时,可以调用 resolveClass,这取决于 loadClass 的 resolve 参数的值。

 

 

E) 方法 findLoadedClass

findLoadedClass 充当一个缓存:当请求 loadClass 装入类时,它调用该方法来查看 ClassLoader 是否已装入这个类,这样可以避免重新装入已存在类所造成的麻烦。应首先调用该方法。

 

3, 怎么组装这些方法

1) 调用 findLoadedClass 来查看是否存在已装入的类。

2) 如果没有,那么采用那种特殊的神奇方式来获取原始字节。

3) 如果已有原始字节,调用 defineClass 将它们转换成 Class 对象。

4) 如果没有原始字节,然后调用 findSystemClass 查看是否从本地文件系统获取类。

5) 如果 resolve 参数是 true,那么调用 resolveClass 解析 Class 对象。

6) 如果还没有类,返回 ClassNotFoundException。

 

4,Java 2 中 ClassLoader 的变动

1)loadClass 的缺省实现

定制编写的 loadClass 方法一般尝试几种方式来装入所请求的类,如果您编写许多类,会发现一次次地在相同的、很复杂的方法上编写变量。 在 Java 1.2 中 loadClass 的实现嵌入了大多数查找类的一般方法,并使您通过覆盖 findClass 方法来定制它,在适当的时候 findClass 会调用 loadClass。 这种方式的好处是您可能不一定要覆盖 loadClass;只要覆盖 findClass 就行了,这减少了工作量。

 

2)新方法:findClass

loadClass 的缺省实现调用这个新方法。findClass 的用途包含您的 ClassLoader 的所有特殊代码,而无需要复制其它代码(例如,当专门的方法失败时,调用系统 ClassLoader)。

 

3) 新方法:getSystemClassLoader

如果覆盖 findClass 或 loadClass,getSystemClassLoader 使您能以实际 ClassLoader 对象来访问系统 ClassLoader(而不是固定的从 findSystemClass 调用它)。

 

4) 新方法:getParent

为了将类请求委托给父代 ClassLoader,这个新方法允许 ClassLoader 获取它的父代 ClassLoader。当使用特殊方法,定制的 ClassLoader 不能找到类时,可以使用这种方法。

父代 ClassLoader 被定义成创建该 ClassLoader 所包含代码的对象的 ClassLoader。

Android解析ClassLoader(二)Android中的ClassLoader 相关文章 Java虚拟机系列 Android系统启动系列 Android解析ClassLoader系列 前言 在上一篇文章我们学习了Java的ClassLoader,很多同学会把Java和Android的ClassLoader搞混,甚至会认为Android中的ClassLoader和Java中的ClassLoader是一样的,这显然是不对的。这一篇文章我们就来学习Android中的C... 阅读详情

相关推荐

JDK源码之ClassLoader

Java 中,自定义类加载器允许从标准的 classpath 之外的位置,如特定的目录、网络或者加密文件动态加载类。自定义类加载器的核心在于理解 Java 的双亲委派模型。该模型规定:当一个类加载器收到加载请求时,它首先不会自己尝试去加载,而是将这个请求委托给父类加载器去完成。只有当所有父类加载器都无法完成加载时,当前加载器才会调用自己的 findClass 方法。因此,实现自定义类加载器的标准做法是继承类,并重写 findClass 方法。

qq_25139621的博客 1122

Android解析ClassLoader(一)Java中的ClassLoader

系统提供的类加载器只能够加载指定目录下的jar包和Class文件,如果想要加载网络上的或者是D盘某一文件中的jar包和Class文件则需要自定义ClassLoader。定义一个自定义ClassLoade并继承抽象类ClassLoader。复写findClass方法,并在findClass方法中调用defineClass方法。下面我们就自定义一个ClassLoader用来加载位于D:\lib的Class文件。

qq_39431405的博客 708

ClassLoader

任何一个Java 程序都是由一个或多个 class 文件组成,在程序运行时,需要将 class 文件加载到 JVM 中才可以使用,负责加载这些 class 文件的就是 Java 的类加载机制。ClassLoader 的作用简单来说就是加载 class 文件,提供给程序运行时使用。每个 Class 对象的内部都有一个 classLoader 字段来标识自己是由哪个 ClassLoader 加载的。

zhuhai0613的博客 894

详解JAVA ClassLoader

ClassLoader,翻译成中文就是“类加载器”。对于普通的 Java 开发者来说,可能接触得比较少,但对于框架开发者或者需要深度定制 Java 应用的开发者来说,这是一个非常重要的工具。理解 ClassLoader 的工作机制,能帮助我们更好地理解 Java 程序的运行原理,还能指导我们编写出更高效的代码。ClassLoader 的主要功能是将.class文件加载到 JVM(Java 虚拟机)中,使程序能够正常运行。不过,JVM 在启动时并不会一次性将所有的类文件加载到内存中,而是根据需要动态加载。

weixin_60669486的博客 1450

ClassLoader加载类的原理

ClassLoader使用的是双亲委托模型来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap ClassLoader)本身没有父类加载器,但可以用作其它ClassLoader实例的的父类加载器。

Willdas博客 917

Android中ClassLoader源码解析之真的是你认为的ClassLoader

1.前言 首先,阅读本文章之前,需要了解java中的ClassLoader的基本原理,包括java中的三级ClassLoader机制以及ClassLoader的委托机制,否则下面的内容会不知道在讲什么。虽然Android中的ClassLoader也是遵循其委托机制,但是他没有遵循java的三级ClassLoader机制,而是自己造了一个,修改了java系统的代码,如果将两者混淆的话,在Andro

ScheduledThreadPoolExecutor原理源码解析 4252

JVM实战:ClassLoader的原理及应用

ClassLoader(类加载器) 是 JVM(Java 虚拟机)的核心组件之一。它的核心职责只有一件事:将内存外部的 .class 字节码文件,加载到 JVM 的方法区中,并转为 java.lang.Class 对象// null= null) {Java提供了抽象类java.lang.ClassLoader,所有用户自定义的类加载器都应该继承ClassLoader类,所以我们先看一下ClassLoader的逻辑,看一下它加载类的主要逻辑我截取了3个重要的方法。

小识的博客 691

深入解析 ReDoc:从零构建高性能 API 文档的终极指南

ReDoc 是一个强大的开源工具,用于将 OpenAPI 规范转换为高质量、响应式的 API 文档。本文详细介绍了如何使用 ReDoc 构建和自定义 API 文档,包括如何编写支持 OpenAPI 的 API 注解、配置 HTML 页面以加载文档,以及如何利用 ReDoc 的高级功能进行定制。通过实例代码,您将学会如何灵活地展示 API 文档,提升用户体验。无论是初学者还是经验丰富的开发者,都能从本文中获得实用的技巧与方案,帮助快速搭建符合需求的 API 文档界面。

楠搏万的博客 4627

Java classloader

本文介绍了Java类加载器的继承性和隔离性。类加载器分为四个层级:Bootstrap、Extension、System和Plugin,遵循"父委托"机制。隔离性体现在父级不能调用子级类、同级加载器不能互相调用、无法获取Bootstrap实例。文章展示了如何使用URLClassLoader加载外部jar包,并提供了自定义ClassLoader的示例代码,通过读取jar文件字节码实现类加载。最后指出规范实现应优先调用父加载器并缓存已加载类,以提升性能。

你的指尖有改变世界的力量 986

具身智能端到端大模型VLA (Vision Language Action)

在语言为条件的机器人任务中,策略必须具备理解语言指令、视觉感知环境并生成适当动作的能力,这就需要VLA的。例如,在自动驾驶领域,传统的做法是将感知、预测、规划等步骤分开处理,而VLA则试图用一个统一的框架来替代这种分立的方法。另外,VLA的模型对于算力的需求很大,单片AI算力1000Tops的Thor大概率会延期发布,加上英伟达芯片的量产时间与成本挑战,以及在国内的应用情况,对车企而言是个大问题。以谷歌DeepMind推出的RT-2为例,该模型可以在新的物体、背景和环境中表现出显著改善的性能。

具身智能机器人 1万+

哨兵1号(Sentinel-1)雷达SAR数据预处理全流程:从下载到精确配准

本文详细介绍了哨兵1号(Sentinel-1)雷达SAR数据从下载到精确配准的全流程预处理方法。内容涵盖SLC与GRD数据选择、ASF平台下载技巧,并重点解析了使用SNAP软件进行几何校正、辐射定标及高精度配准的核心步骤,为InSAR形变监测等应用提供可靠的数据基础。

weixin_29208327的博客 478

java classloader_Java Classloader原理分析

类的加载过程指通过一个类的全限定名来获取描述此类的二进制字节流,并将其转化为方法区的数据结构,进而生成一个java.lang.Class对象作为方法区这个类各种数据访问的入口。这个过程通过Java中的类加载器(ClassLoader)来完成。类装载器是用来把类(class)装载进JVM的。JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defin...

weixin_29495679的博客 338

OAK-D-Pro深度解析:从硬件融合到全天候SLAM实战

本文深度解析OAK-D-Pro硬件架构及其在SLAM领域的实战应用。作为SLAM的"六边形战士",OAK-D-Pro融合主动双目摄像头、结构光投射器、6轴IMU等传感器,实现全天候稳定工作。通过实测数据展示其在弱纹理环境、动态光照等复杂场景下的卓越表现,并提供SLAM实战技巧与开发指南,帮助开发者快速部署高效SLAM解决方案。

weixin_27244795的博客 183

ClassLoader (一) — Android 中的 ClassLoader 体系

Android 中, DVM 或 ART虚拟机加载的是 Dex 文件,因此 Androd 中自定义了部分 ClassLoader 来实现类的加载。 Android 中的 ClassLoader 类型分为两种: 1. 系统类加载器。系统类加载器主要包括 3 种,分别是BootClassLoader 、 PathClassLoader 和 DexClassLoader。 2. 自定义加载器。

Elson的博客 2060

CMCC-IPC-A410串口刷机救砖教程

《CMCC-IPC-A410摄像头串口刷机指南》摘要 本指南针对2018年前老款CMCC-IPC-A410摄像头变砖/升级失败的情况,提供串口刷机方案。需准备CH340G串口模块、杜邦线、海康V5.5.82固件等工具。操作包含硬件连接(TX/RX交叉接线)、115200波特率终端配置、CTRL+U进入刷机模式,通过UPF格式化、tftp传输固件、update写入等步骤完成修复。刷机后设备恢复未激活状态,需重置密码,原定制功能可能失效。整个过程需稳定供电,耗时约15-20分钟,注意此操作将使原厂保修失效。(1

海康威视技术支持 1846

【逐函数讲解ORB_SLAM3源码】获取普通帧率、关键帧、IMU数据

获得imu的旋转 mRwc * mImuCalib.mTcb.rotationMatrix(); Sophus::SE3 mTwc 创建ORB_SLAM3系统 Create SLAM system. It initializes all system threads and gets ready to process frames. ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::IMU_RGBD, true, 0, file_nam

小秋 AI SLAM 入门实战教程 1245

如何实现自定义的ClassLoader

作者:Kert    本文选自:开放系统世界——赛迪网  2002年09月23日 ClassLoader,顾名思义是用来Load Class的,即加载Java类。ClassLoader读入一个字节数组,并且经过处理返回一个JVM内部可以识别的Class实例。Java虚拟机使用一套复杂但有效的方式来进行这一个至关重要的过程处理,并且提供了许多灵活的方式供人们扩展这套机制。 为什么要使用自定义Cla

K.Y.Z@优快云 2006

携程机票数据爬取实战:使用 Python 获取携程网机票信息

通过本篇博客,我们详细介绍了如何使用 Python 爬取携程网的机票信息,涉及了静态网页爬取(使用 Requests 和 BeautifulSoup)和动态网页爬取(使用 Selenium)两种方法。通过获取的数据,我们不仅能够进行票价分析,还可以构建更为复杂的预测模型或趋势分析工具。爬虫技术不仅能够帮助我们收集有价值的数据,还能够为商业决策提供数据支持。在实际应用中,我们可以结合更多的分析方法,如自然语言处理、图像处理等,进一步提升数据的价值。

2201_76125261的博客 1657

【Java】【JVM】ClassLoader机制解析

JVM ClassLoader机制解析 摘要:本文深入解析JVM ClassLoader机制,重点介绍了类加载器层级结构、双亲委派模型及其工作原理。ClassLoader体系包含Bootstrap、Extension和Application三个核心加载器,采用双亲委派机制确保类加载的安全性和唯一性。文章通过代码示例验证了类加载器的层级关系,并分析了双亲委派模型在JDK源码中的实现。同时探讨了SPI机制如何破坏双亲委派规则,以及线程上下文类加载器(TCCL)如何解决这一问题。最后通过JDBC驱动加载的源码分析

瘦到被风吹走的博客 1153

修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

【代码】修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

路~可以走过 2773

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ClassLoader原理

ClassLoader是用来处理类加载的类,它管理着具体类的运行时上下文。 1.ClassLoader存在的模块意义: 1)从java的package定义出发: classloader是通过分层的关联方式来管理运行中使用的类,不同的classloader中管理的类是不相同的,或者即便两个类毫无二致(除了路径)也是不同的两个类,在进行强制转换时也会抛出ClassCastException...

weixin_30301183的博客 113

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java中的ClassLoader

ClassLoader简介 ClassLoader负责在运行时将Java类动态加载到JVM中,而且ClassLoader是JRE的一部分。因此,由于ClassLoader的存在,JVM无需了解底层文件和文件系统即可运行Java程序。 而且,ClassLoader并不会一次把所有Java类加载到内存中,而是在应用程序需要的时候加载。这就是ClassLoader发挥作用的地方,它们负责将类加载到内存中。 内置的CLassLoader的类型 下面是一个简单的例子,它展示了不同的类被哪种ClassLoade

DDDInJava 627

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android ClassLoader加载机制详解

Android ClassLoader机制解析:本文详细介绍了Android中的类加载机制,包括ClassLoader的核心概念、继承体系和工作原理。重点分析了双亲委派模型的实现过程,以及DexPathList和DexElement在类加载中的作用。文章还探讨了Android特有的类加载器(DexClassLoader、PathClassLoader等)与Java的区别,并提供了自定义ClassLoader的示例。通过解析ClassLoader的底层实现,有助于理解插件化、热修复等高级功能的实现原理,为相关

顾林海 2175
上一篇: JVM调优总结[转]
下一篇: 关于Java垃圾回收机制
csbison
博客等级 码龄23年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值