00:00
那么第六个特性呢,我们叫做呃,默认生成类数据共享归档文件啊,这个类数据共享文件呢,我们称作叫CDS,它是呢叫做class data sharing的一个缩写,那这块我们先有一个背景介绍哈,说呢,我们在同一台物理机上或者是虚拟机上呢,如果想启动多个GM,那么如果每个GM呢,都单独的加载自己需要的所有的类,那么很显然启动的时间,包括呢,我们的内存的占用啊,都会是比较高的。那么这时候呢,我们就会去想,那么对于每一个虚拟机,如果他们有一些共用的类需要去加载的话呢,我们就可以引入叫类数据共享机制,那当然好处呢很明显,第一个呢,我们启动时间呢就会比较少啊,只有在第一个诶虚拟机启动诶共享的类的时候呢,我们需要花一定的时间,那么后续的障碍,虚拟加载同样的类的时候呢,启动时间就更快了啊,节省了这部分的时间,那同时呢,由于内存当中我们只加载过一个类文件,那相应的这个内存占用量呢也会比较少。
01:01
啊,这个好处呢,其实大家一听呢,非常的这个好理解啊,就好比是呢,大家毕业以后呢,呃,如果你在北京工作,呃,通常呢,一开始你买房子可能还不太现实啊,去出去这个租一间房子,比如说呢,你租的是三室一厅中的一间啊这呢是你的卧室啊这呢是另外的呃两个这个室友的卧室,那么大家呢,就没有必要呢,每一套啊,这个每一间房子里边呢,去提供一个厕所啊,提供一个厨房,包括呢提供一个客厅了啊那对于这样的结构呢,大家共享就可以了。啊,这就一个共享的概念,当然了,这个例子呢,经常用来是形容我们说的static的,啊,就是这个静态域。那那在这呢,我们也可以做相关的一个类比,就是如果呢,我们每一个Java虚拟机大家呢,加载的类是相同的,那我们这里呢,就没有必要每一个虚拟机呢,都加载各自的这个类啊,这个加载一份了,那我们只需要呢,第一次啊,第一个Java虚机进行加载就OK了啊,减少加载时间,同时呢,这个GM的啊内存占用呢也会更少。
02:00
那其实这个想法呢,并不是我们JAVA12呢引出的,在GT5的时候呢,其实就提到了呃,Class data sharry啊,由多个Java虚尼去共享class,呃,只不过这时候呢,我们只支持system class,也就是说呢,我们对于呃Java API提供的核心类库我们是支持共享的,那么JAVA9的时候呢,从这个理论上呢,去支持了关于应用程序的class啊,也就是我们自定义的class的一个支持,那张老师呢,就明确的啊,这个提到了啊,Application的class data sharing,并且呢,做了一个开源处理。啊,可以作为我们社区的一个新特性了,呃,这呢就是我们所提到的啊,就是原来的话呢,在诶JDK9之前,我们只能够去通过bootrap诶class loader叫引导类加载器呢,去加载我们这个系统的核心的类,那不能够去使用APP class loader去加载咱们自定义的类的这个啊进行共享,那相当于Java时的时候呢,我们可以对自定义类呢,也可以进行一个共享了啊这就相当于把我们原来啊这个CDS的范围呢进行了一个扩大啊是这样的情况,那么JDK11的时候呢,对我们这个特性呢,也进行了一个改进,就是这个支持我们这个share的由off状态呢,自动调整为一个auto状态,就大家呢不需要呢再去显示的调用这样的指令去启动一个data share了。
03:17
啊是这样子的,那么这个迭代的一个效果啊,就是自扎巴以来,这是我们官方文档这个解释的啊,我就把它翻译成一个中文了。说自JAVA8以来,在基本的CDS功能上呢,进行了呃增强改进,启动CDS后的应用的一个启动时间和内存占用量呢,有显著的减少,比如说呢,张21早期版本在64位的Linux上运行hello word进行测试呢,发现呢,启动时间缩短了32%,呃,这个效果还是非常明显的啊,那在其他的平台上也有类似的一个性能提升。好,这呢是我们说的JAVA11之及之前的一个情况,那么JAVA12呢,相当于在这个基础上呢,进行了一个优化啊,这里边呢,就提到了我们针对64位平台的JDK进行了一个增强,那么32位有没有增强呢?我看了官方的介绍啊,说32位呢,说后续呢,呃会做一个增强处理啊,这个言外之意呢,就是现在更多的我们都是基于呃64位架构的了,所以说呢,呃优先对64位平台进行了优化。
04:17
那优化完以后的效果呢,就是我们不再需要显示的去调用诶Java-X share dump这样的一个指令了,而是呢,我们这个会自动的这个进行这样一个指令的调用啊,在我们链接操作之后啊呃,使其呢默认生成啊类数据的一个共享文件。那这样的目的呢,就是能够改进我们应用程序启动时间的一个目的,呃,主要呢,还有一个点就是避免了我们去手动的来调用啊这样的一个指令了啊,那么生成的这个文件呢,会存在我们这个Java home下面有个live文件啊,文件夹下的server文件目录像。啊,大小呢,大概有18兆啊这样的情况啊,那如果大家额外的还需要呢,去调整我们这些参数,调整那个蹲空间啊,具体的一些新生代老声带的一个比例大小,大家也可以再使用其他的一个GC参数进行一个呃调整就可以了。
05:10
啊,这呢就是我们说的叫CDS啊,大家更多的是理解一下我们CDS这样设计的一个目的是什么啊,这个JAVA12呢,只是对它呢进行了一个进一步的优化啊,仅此而已。
我来说两句