java虚拟机学习-03 | Java虚拟机是如何加载Java类的?

       https://time.geekbang.org/column/article/11523

       java的语言类型分为基本类型(primitive types)和引用类型(reference types),其中引用类型还细分为接口,类,数组类和泛型参数. 其中泛型会在编译过程中被擦除. 因此java虚拟机中实际上只有三种,在类,接口,数组类中,数组类由虚拟机直接生成,其他两种都具有对应的字节流.

        字节流:最常见的是由编译器直接生成的,除此还可以在程序内部直接生成或者从网页中获取(例如网页中内嵌的小程序 Java applet)字节流

以下是类加载的步骤:

加载

        加载指查找字节流,并根据这创建类的过程. 对于除了数组类的其他类,虚拟机需要通过类加载器来完成查找字节流的过程

        虚拟机中除了启动类加载器(boot class loader)是由C++实现的,其余的类加载器都是java.lang.classloader的子类,需要由其他的类加载器加载到虚拟机中,比如启动类加载器.

        类加载器加载字节流时有一个双亲委派模型,指每个类加载器接收到加载请求时,它会将请求转给父-类加载器,在父-类加载器没找到所请求的类,该加载类才会去进行加载,当该类加载器还找不到的情况下会直接报ClassNotFountExption,不会再往下寻找子-类加载器

      在java9之前:

      启动类加载器(boot class loader)负责加载最基础,最重要的类,比如存放在JRE下lib目录下jar包的类(以及有虚拟机参数Xbootclasspath指定的类).

     扩展类加载器(ext class loader)的父-类加载器是启动类加载器,负责加载相对次要但又通用的类,比如放在JRE的lib/ext下的jar包中的类(以及由系统变量java.ext.d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值