00:01
那下边的话呢,咱们具体来看一下,咱们之前呢,在上篇呢,也给大家提到过的这几类呢,具体的类的加载器啊,这呢也相当于是一个复习的内容,那首先的话呢,我们来看到的就是叫引导类加载器,或者呢也称为呢叫启动类加载器,那这里边我们提到呢,这个booksri class order,它是使用C啊和C加加语言呢进行了一个编写,整个呢就是嵌套在咱们GM的内部啊,也可以说呢,就是咱们GM的内部的一个部分,它呢主要来负责加载咱们Java的这个核心类库。啊,核心类库,那所谓的核心类库呢,像这里边提到RT点炸对吧,咱们使用的大量的这个核心API呢,都是RT点炸包里边的,那以及说我们这个路径下相关的一些内容,那主要呢,是用于提供那GM呢自身需要的一些类,那像非常简单的我们说一个Java程序,这个我们要运行的话呢,实际上呢,也需要加载大量的一些核心类,那么这些核心类的加载呢,都是使用的咱们叫引导类加载器。
01:01
啊,这个注意,然后呢,接着呢,提到说引导类加载器呢,它并不继承于class,那因为class这是咱们Java语言的一个体系当中的一个类的加载器中的一个顶级的类,对吧,那咱们现在呢,是CC加加语言去编写的,肯定不会继成Java这个体系结构啊这个要注意它呢是顶头了,所以没有负类加载器。那另外呢,说出于安全的考虑呢,这个BOO driver呢,启动器,嗯,启动的类加载器,它只加载包名为Java Java X和三开头的这样的一些类啊这呢还跟咱们后边讲的叫这个双金尾牌机制啊啊有一定的这个关联关系啊,它呢就像咱们讲上面时候提到过的说呢,诶这呢属于以前我们说这个国王皇族对吧,皇族呢,是不是有这个御用的厨师,还有这个御用的这个医生啊,御医啊等等,那这个像这样的一些开头呢,我们可以列成比如就是皇族的啊像这个唐朝呢,就是李氏家族,这个明朝的话呢,这就是这个朱氏家族,对吧?那凡是呢,你看到这个姓朱的,你知道普通老百姓呢,就都不能这个都得避开皇帝的这个姓,那你要看到这个姓开头的,那就是皇室的成员,那就是专门人家有这个。
02:09
叫什么御医啊,或者这个啊,专门的这个这个叫什么厨师,御用厨师啊,去给他们做饭。你要是普通这个老百姓的话呢,那你是没有资格使用这个轻微加压器的。啊,就这样一个场景啊,OK,然后下边呢,就是提到了这样一个问题,说呢,这个扩展类加载器和应用程序类加载器呢,它们两类加载器的这个加载也是使用我们不拉的。那你看这里边就加载它们对吧,然后呢,并且呢,把bootra class呢,作为咱们这个扩展类加器和应用程序类加期的这个福利加器。那什么意思啊,这个意思就是,嗯,咱们这个扩展类加载器呢,是加载指定炸包下的那些类对吧?应用程序类加载器呢,是我们用的最多的,像咱们自定义一些类呢,都默认情况下是应用程序类加载器帮我们进行的加载,那么你这个扩展类也好,应用程序类也好,本身呢,他们加载的话呢,实际上也是他们这些类的具体的这个对象。
03:06
对吧,具体的实例呢,去加载的,那你这个对象的创建之前,肯定也涉及到这个类的一个加载,还有这个类的一个加载,那你这两类加载谁给你加载啊,那这块呢,就提到了叫启动类加载器,就它呢负责这两这两个类的加载。啊举一个例,例子的话呢,就比如说呢,这个大庆啊,咱知道是这个产石油的是吧,大庆呢,现在我们说要这个产石油,产石油的话呢,你需要用相关的这种钻井的机器,这个机器的话呢,然后打这个井是吧,然后呢,把这个油呢就喷出来了,那现在的问题就是说这个呃,机器的话呢,本身也得需要这个油来驱动是吧。它的目的呢,是为了这个把这个油打出来,但是问题是这个机器本身也需要有说你这个类的话呢,是来加载别的类的,但是这个类本身也需要加载,怎么办啊,那这时候我们启动了下器,就好比是呢,呃,驱动这个钻井的这个机器的这个油,把这个油呢,诶倒进去之后,那这个机器能运动了,然后它就把别的油给打出来了。
04:05
啊,就是这样一个意思啊,启动类加载器啊,明确是它的这样一个地位啊,所以从这个角度上来讲的话呢,我们叫做启动类,或者呢,叫做引导类是吧?啊引导别人的。对吧,哎,最开头的这样的一个类加A类的加载啊。然后下边这块呢,这个相当于是写了一个具体的一个截图,这个咱们在上一章的时候呢,关于类的加载过程啊,其实用到过这个参数啊,叫trace class loading,就是来追踪一下我们这个类的加载过程的这样的一个参数,那咱们在这块呢,也可以举个例子啊,比如说呢,就针对我们这个类。啊,咱们这是用的这个main方法,那我就可以直接在。呃,Edit configuration的,呃,关于我们这个类这块了,嗯,现在还不是它,嗯,改一下说我们这个user test对吧?哎,我把这个参数呢,就直接粘到这就可以了,然后呢,啊应用一下,那接下来我们把这个程序呢,给它运行起来,它就需要进行一个加载是吧,那在这个过程当中啊,我们说就能看到啊,比如说像咱们一开始。
05:06
哎,大家会发现呢,关于这个object这个类的一个加载。在这个类的话呢,毫无疑问是咱们Java里边非常核心的一个API,对吧,那么这个类的话呢,它的加载就需要使用阴道类加载器。啊引导类加载器,然后呢,再往下大家会发现呢,有这个叫class loader,这个呢,是咱们这个Java层面的啊,类的加载器的一个顶头的一个类,从继承关系上来讲啊,它是一个顶头的一个类,好然后再往下这块去找的话呢。这个大家如果找起来,你要不容易,你就ctrl a ctrl CL一下啊,可以这样子来处理,桌面上我们去新建一个啊文本文件对吧。哎,把它粘过来,然后CTRLF,我们搜索一下谁呢这个ext。啊,这个class no啊。哎,在这就找到了行这个我们上面你看这是在90多号啊,在上面的话呢,我们不是看到了关于这个class load它的一个加载,对吧?那包括你像这些大的class啊,Tap,这涉及到反射相关的,还有这个字符串对吧?所以呢,大家会看到我们看似一个比较简单的一个程序的执行,它实际内部呢,涉及到了很多API的一个加载啊,那你看这里边不有很多吗?然后在这个90多行的位置呢,我们看到了关于叫这个扩展类加载器和应用程序类加载器它俩的一个加载。
06:26
对吧,就这两哥们的加载呢,就需要使用咱们的引导类加载器来做。啊,他自己呢,是不可能加载自己的,对吧?啊这个毫无疑问啊,就跟说呢,我给大家发了一个压缩文件,那有同学说老师我没有这个解压的这个软件,那怎么办呀?诶我告诉学生说说诶我这个压缩软软件里边,我呃压缩的这个文件里边,我有一个压缩的软件,你去打开吧,这不就成了一个死结了是吧?就是说呢,你要加载这个类,这个类呢,呃,他加载别的类,他自己呢也需要加载,你还让他自己去加载,这不可能,那得用别的加载谁啊引导类加载器是吧。好,就是这个基本的一个概念啊呃,那下边呢,就提到这个问题,就是刚才呢,说我们这个,呃引导类,这个引导类加进去呢,是使用C和C加语言编写的啊,那这里边呢,我们就相当于是还啰嗦两句,这个C跟C加语言呢,虽然说使用了这个叫指针函数啊,或者我们说叫函数指针,在编写方面呢,在我们处理这个代码方面呢,其实很繁琐,对吧,那Java语言的话呢,相当于是由这个C加语言的一个演化来的,就去除了这个指针和指针函数,所以呢,我们从这个层面可以看作是Java语言呢,作为C加语言的一个叫轻量级版啊,叫减减版啊,C加呢支持多集程,Java呢只支持单继程啊,这是他们语法层面的一个变化,那另外的话呢,就提到Java语言在最初出现的时候呢,这个显然C跟C加呢,就是大行其道,对吧,从这个执行的效率上来讲呢,确实也更加高效一些,那所以呢,我们在加载这些核心API的时候呢,咱们这个呃,核心API加载的这个不tra so,我们就选择用C和C加。
07:59
其他语言来实现,那更看重的也是它这个,呃,执行的一个效率比较高这样的一个场景。
08:07
啊,那我们在运行任何这个Java程序的时候呢,其实都会涉及到相关的一些核心API的一些加载,那还是蛮多的,对吧,那这个时候呢,我们用boostra拉,效率上要更好一些,当然呢,现在来看,那我们说随着这个Java语言,呃,一方面的话呢,引入了叫git啊,即时编译器啊,另外的话呢,这个硬件的这个呃,技术呢,也是突飞猛进,包括硬件的这个价格呢,也是不断的在降低,那其实呢,也。基本上拉近了Java,呃,不能叫拉近了,基本上呢,就是拉平了这个Java和C加加这个语言的这个执行的效率啊,当然呢,最初我们这个呃引道类加载器仍然还是用这个C和C加载语言来编写,然后嵌套在这个GVM的这个内部,那包括呢,我们使用这个呃扩展类加载器,你试图get parent呢,想拿到这个引导类加载器,这也不现实啊,所以返回值呢,就是no啊,在这个大家注意一下这个问题。
我来说两句