标签:Java JDK 自定义 静态 目录 源码 class 加载
Java代码执行过程
执行Java代码的过程: 执行Java.exe调用JVM.dll创建Java虚拟机 -> 调用由c++编写的引导类加载器,该类加载器会加载核心类库 -> 调用sun.misc.Launcher的构造方法会创建Launcher类对象,在该构造方法中会创建扩展类加载器和应用类加载器
执行过程如下图所示
因为Java类加载模式是懒加载,所以并不会在一开始就将所用类一次性加载到JVM中,会根据双亲委派机制对类进行加载。
各种类加载器
引导类加载器: 用于加载核心类库,比如rt.jar、或String.class,引导类加载器为最上层加载器,加载的目录为\JDK\1.8\jre\lib
扩展类加载器:用于加载扩展类包,扩展类加载器在引导类加载器下层,加载目录为JDK\jre\lib\ext
应用类加载器:用于加载用户自定义的类,加载目录为target目录下的class文件。
自定义类加载器: 用户自定义类加载器,加载目录可以自定义。
类加载的过程
加载:将class文件以二进制数组读取到内存中。
验证:校验class文件的字节码是否符合规则。
初始化:给静态变量分配内存并设置默认值。
解析:将符号引用转换为直接引用,该阶段会将静态符号引用转换为内存地址值用于执行,这个过程被称为静态链接,动态链接是指在程序执行过程中进行符号引用转换。
初始化:为静态变量赋值并执行静态语句块。
符号引用:符号就是在Java文件
标签:Java,JDK,自定义,静态,目录,源码,class,加载 来源: https://www.cnblogs.com/lyraHeartstrings/p/16445916.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。