2011-09-20 78 views
5

我正在寻找一个简单的场景,可以要求创建自定义类加载器吗?可能需要自定义类加载器的情形?

除此之外,只是想确认引导程序和应用程序类加载器是否在内部扩展了java.lang.ClassLoader?

+0

那么,像tomcat这样的Java应用服务器可能需要一个自定义的类加载器,例如为每个应用程序提供它自己的加载类的“快照”。 –

回答

9

简而言之,它可用于添加新代码或实时更改现有代码。以下是这个URL更详细的解释。

为什么写一个自定义类加载器?

对于希望创建一个自定义类加载器的三个主要原因是:

  • 要允许类加载来自其他存储库。

    这是最常见的情况,应用程序开发人员可能希望从其他位置(例如通过网络连接)加载类。

  • 分割用户代码。

    这种情况不常被应用程序开发人员使用,但广泛用于servlet引擎。

  • 允许卸载类。

    如果应用程序创建大量仅用于有限时间段的类,此例很有用。由于类加载器会维护已加载的类的缓存,因此只有在类加载器本身已被取消引用之后才能卸载这些类。出于这个原因,系统和扩展类永远不会被卸载,但是当它们的类加载器时,应用程序类可以被卸载。

+0

谢谢RHT。正如你所说的,“应用程序类可以在他们的类加载器被卸载。”应用程序类加载器是否随时在app/web服务器中卸载?根据我的理解,当我们关闭应用程序/ Web服务器时,它们也会卸载。右?不确定扩展类是什么意思? –

+0

嗨,萨克。首先,我对迟到的回应表示歉意。今天我回到了StackOverflow,寻找自己对这个问题的回应,并且我注意到了你的评论。 – RHT

+0

你的问题 - 什么是系统/扩展类应该是一个关于StackOverflow的单独的顶级问题,它值得一个详细的响应,但总之 - Application Server本身就是一个Java应用程序,它位于JVM之上,因此它拥有它自己的它需要使用的系统类或者可能跨不同应用程序共享的库。各个供应商的术语各不相同,但这些类不会随应用程序一起卸载。 – RHT

相关问题