温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java之jvm加载器使用方法

发布时间:2021-03-03 17:14:19 来源:亿速云 阅读:139 作者:TREX 栏目:开发技术

这篇文章主要讲解了“java之jvm加载器使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java之jvm加载器使用方法”吧!

在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文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身安全。其主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。

四种验证做进一步说明:

  1. 文件格式验证:主要验证字节流是否符合Class文件格式规范,并且能被当前的虚拟机加载处理。例如:主,次版本号是否在当前虚拟机处理的范围之内。常量池中是否有不被支持的常量类型。指向常量的中的索引值是否存在不存在的常量或不符合类型的常量。

  2. 元数据验证:对字节码描述的信息进行语义的分析,分析是否符合java的语言语法的规范。

  3. 字节码验证:最重要的验证环节,分析数据流和控制,确定语义是合法的,符合逻辑的。主要的针对元数据验证后对方法体的验证。保证类方法在运行时不会有危害出现。

  4. 符号引用验证:主要是针对符号引用转换为直接引用的时候,是会延伸到第三解析阶段,主要去确定访问类型等涉及到引用的情况,主要是要保证引用一定会被访问到,不会出现类等无法访问的问题。

感谢各位的阅读,以上就是“java之jvm加载器使用方法”的内容了,经过本文的学习后,相信大家对java之jvm加载器使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI