扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1. Class files
一般而言,我们都会将逻辑代码编写在以.java为后缀的文件中。class文件则是由java文件编译【使用javac命令编译】而成。
2. 类加载器子系统
class文件已经有了,那么class文件又是如何加载进虚拟机的呢?这时不得不提一下类加载器。类加载器,顾名思义,就是实现对类的加载-类加载器的主要任务就是将class文件加载进虚拟机内存。 从JAVA虚拟机的角度来看,类加载器可分为两种,一种是启动类加载器,用于加载虚拟机运行时所需类库。另一种是其他类加载器,用于加载非启动类库的其他所有类库。 从java开发人员的角度来看,类加载器还可以做更细致的划分,可分为:启用类加载器、扩展类加载器、应用程序类加载器及自动类加载器。如下图:
双亲委派模型
当类加载器收到类的加载请求时,首先自身不尝试去加载这个类,而是将这个类请求委派给父类加载器去完成。每个类加载 器都如此。因此所有的类加载请求都会传递到顶级类加载器【启动类加载器】,只有当父类加载器无法完成类加载请求时,子类加载器才会尝试自己去加载。
如当类加载器加载java.lang.String类时。首先应用程序类加载器会接收到java.lang.String类的加载请求,因为应用序类加载器有父类加载器,所以应用程序类加载器不会尝试去加载java.lang.String类,而是将加载java.lang.String类的请求传递给父类加载器【扩展类加载器】。又因为扩展类加载器也有父类加载器【启用类加载器】,所以扩展类加载器也不去加载java.lang.String类,而是将加载java.lang.String类的请求传递给父类加载器【启动类加载器】。启动类加载器是顶级加载器,无父类加载器。它将尝试去加载java.lang.String类,刚好在rt.jar中找到了java.lang.String类,于是将该类加载进虚拟机。如果要加载的类并不在rt.jar里时。启动类加载器无法处理类请求,则会将类的加载请求下放子类加载器去处理。 如下图:
类加载器内部是如何实现类加载的?这时候就要介绍一下类的加载过程。 类的加载时机分5步:加载、连接【验证、准备、解析】、初始化、使用、与卸载。其中加载、验证、准备、解析、初始化为类的加载全过程。如下图:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流