JAVA为什么要有多个类加载器,1个不行吗
JAVA为什么要有多个加载器
我知道加载器作用是通过类名来获取二进制字节流。主要分为四种加载器,启动类->扩展类->应用类->自定义类。我也知道双亲委派机制的好处,就是越基础的类交给越高级的加载器加载。
我问题是只有一个加载器来加载全部的类不行吗,这样的话也就不存在什么不使用双亲委派机制的问题了
还是不懂
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
思考以下情景:
小结:
jvm 需要有不同的类加载器,因为它一方面允许你在一个 jvm 里运行不同的应用程序,另一方面方便你独立的对不同类库进行运行时增强。
虽然 对java 虚拟机没有研究过,java 为什么不能 一个加载器 加载全部的类
很明显, 实现起来也可以
但是需要 的 代码 更多,也更难 为各种类进行 优化,为了更简单的抽象
我在明确知道 该类是启动类的情况下,我就会 为该类 进行优化。
如果是自定义类,可能就 不会进行 此类优化。
在明确 目的的情况下, 专用代码 比 通用代码 更简单,也更有效。
Each class loader is designed to load classes from different locations. For instance, you can actually create a class loader that will load a class file from a networked server or download the binary of a class from a remote web server, etc. The logic that performs this operation is baked into the class loader itself and provides a consistent interface so that clients can load classes regardless of how the class loader actually performs the loading. The BootstrapClassLoader is capable of loading classes from the JVM_HOME/lib directory...but what if you need to load them from a different location??
In short, because there as an infinite (well, not quite) number of ways to load classes and there needs to be a flexible system to allow developers to load them however they want.
每一个类加载器都是为了去在不同的情景下去加载类。比如,你可以从联网服务器上加载一个class文件,也可以从远程web服务器下载二进制类。这么设计是因为我们需要类加载器提供一致的接口,这样客户端就可以加载类但是却不用管类加载器到底是怎么实现的。启动类加载器能够加载JVM_HOME/lib 下的类,但如果我们需要在其他的情况下加载类呢?简单来说,加载类的方法有无数种,我们需要一个灵活的加载器系统去在特定的情况下按照我们的想法来加载类。