在java的学习中,对于jvm模块我们会不断补充一些知识点,毕竟jvm是比较重要的一个组成部分。本篇围绕jvm加载器展开介绍,在加载类的时候,我们的加载器会逐个进行工作,在具体的加载器类型上,想必大家还不是很清楚。下面我们就java之jvm加载器的4中类型带来介绍。
1、Bootstrap ClassLoader (引导类加载器)
负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现的核心库,也就是JVM调用每个系统的API实现系统功能,实现跨平台的主要模块,不是ClassLoader子类。开发者不能直接使用。
2、Extension ClassLoader (扩展类加载器)
负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包,开发者可以直接使用。
3、Application ClassLoader (应用加载)
负责记载classpath中指定的jar包及目录中class。根据需要,通过class的全限定名来加载类,可以通过classLoader.getSystemClassLoader()来获取它。
4、Custom ClassLoader (用户加载器)
属于应用程序根据自身需要自定义的ClassLoader,继承java.lang.classLoader类。如tomcat、jboss都会根据j2ee规范自行实现ClassLoader。
实例扩展:
根类加载器(BootstrapLoader)
package jvmTest; import java.net.URL; import sun.misc.Launcher; public class Boot { public static void main(String[] args) { /* * 这里有可能报错 Access restriction: The type 'Launcher' is not API * 只需要将 全局属性Project>preferences>java>Compiler>Errors/Warnings> * 把右侧的【Deprecated and restricted API>Forbidden reference的Error】置为【Warning】. */ URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for(int i = 0; i < urls.length; i++) { System.out.println(urls[i].toExternalForm()); } } }
当类被加载之后,系统为之生成一个对应的Class对象,接着将会进入连接阶段,连接阶段负责把类的二进制数据合并到JRE中。类连接又可分为如下3个阶段。
验证:验证阶段用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。Java是相对C++语言是安全的语言,例如它有C++不具有的数组越界的检查。这本身就是对自身安全的一种保护。验证阶段是Java非常重要的一个阶段,它会直接的保证应用是否会被恶意入侵的一道重要的防线,越是严谨的验证机制越安全。验证的目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身安全。其主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。
四种验证做进一步说明:
到此这篇关于java之jvm加载器例举的文章就介绍到这了,更多相关java之jvm加载器有几种内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持呐喊教程!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。