这篇文章主要介绍“什么是JVM的类加载机制”,在日常操作中,相信很多人在什么是JVM的类加载机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是JVM的类加载机制”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!JVM中类的生命周期包括7个阶段,加载、准备、验证、解析、初始化 香港云主机、使用、卸载。其中准备、验证、解析被归为连接阶段。jvm在这个阶段完成的工作通过类名获取类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在堆中生成一个代表该类的java.lang.class
对象,作为访问类在方法区中数据的入口在这个阶段开发者可以控制二进制字节流的获取,也就是可以通过自定义的类加载器做自己定制化的操作。顾名思义,验证被加载的类的正确性。文件格式验证:验证字节流是否符合Class文件格式的规范;例如:是否以 0xCAFEBABE开头元数据验证:对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言规范的要求字节码验证:通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。符号引用验证:确保解析动作能正确执行为类的 静态变量分配内存,并将其初始化为默认值只分配静态变量内存初始化默认值是类型的默认值(即int:0、boolean:false…),不是代码显示设置的初始值如果是final static
修饰的变量则会赋值为代码中的初始值(即:final static int val=3,这时val赋值为3,而不是0)把类中的符号引用转换为直接引用符号引用就是一组符号来描述目标(例如:ArrayList)。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。类变量的初始化定义类变量时初始化静态代码块初始化触发类初始化的场景创建类实例,即new对象访问静态变量访问静态方法反射调用(即Class.forName(“com.xxx.Obj”),Obj类被初始化)子类被初始化则父类被初始化启动类加载器(BootStrap ClassLoader):负责加载jrelib下或者-Xbootclasspath 参数指定的路径下的能被jvm识别的类库。开发者无法直接使用拓展类加载器(Extension ClassLoader):sun.misc.Launcher$ExtClassLoader
,它负责加载 jrelibext目录中,或者由 java.ext.dirs系统变量指定的路径中的所有类库。开发者可以直接使用。应用类加载器(Application ClassLoader):sun.misc.Launcher$AppClassLoader
,它负责加载用户类路径(ClassPath)所指定的类。开发者可以直接使用自定义类加载器(Custom ClassLoader):用户可以自定义类加载器双亲委派模型的实现,当一个类加载器需要加载类时,会把这个任务委派给父级类加载器,依次向上,倒顶层启动类加载器为止,如果父级无法加载,再自己处理加载。双亲委派模型的好处是,保证同一类环境中只有一个相同的类。也就是说JVM中判断是否是同一个类的条件是,是否相同的类加载器,类本身相同。代码示例:执行结果到此,关于“什么是JVM的类加载机制”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!
本篇内容主要讲解“python怎么使用V 香港云主机S接收数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么使用VS接收数据”吧!1、使用recvfrom函数。s.recvfrom(1024)2、程…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。