00:01
大家好,我是上午的讲师宋康,那么接着啊,咱们来讲这个第四章,第四章呢,叫做GVM运行时参数啊,那如果说到这一章的话呢,我们用一个词来形容,应该叫做姗姗来迟,那为什么这么讲呢?因为呢,咱们在前边讲到这个上篇的时候呢,咱们提到过内存中的堆栈方法区等等,对吧?那么在讲这些结构的时候啊,咱们是不是就已经谈到了其中的一些这个常见的运行时参数的一些使用,对吧?呃,因为呢,我们只有用上这些参数了以后,那咱们才可以避免比如说频繁的去出现这种JC啊,乃至于说for jc,我们才可以呢,对整个程序呢进行一个优化,所以呢,我们在讲到上品的时候呢,其实我们就已经呃,用到了相关的一些这个参数啊,这是这个,哎,而且呢,咱们后边呢,又讲到这个垃圾回收器。呃,垃圾回收器的话呢,我们也用到了相关的一些参数,比如说最起码我们如何去开启这个垃圾回收器呢,对吧?哎,那这个垃圾回收器里边有哪些参数,我们可以去进行设置呢?这里边儿我们都用到了相关的一些啊GM参数啊,包括呢,后边我们也谈到了是不是日志的问题。
01:07
对吧?呃,那这个日志呢,我们说呃也是便于我们进行这个呃性能调优的一个非常重要的一个指标,那前提呢,就是我们得先能够开启这个呃程序的一个日志的一个输出啊,这里边就涉及到了相关的一些这个指令,这个咱们在讲这个上篇的时候呢,呃,其实跟大家呢,是不是都提过对吧?那我们讲到这个下篇的时候呢,其实讲到那个份的时候呢,其实也提过一个叫printer flex final,就我们打印一下,看看这个在运行的过程当中,我们哪些都有哪些参数,那具体这个值又是多少,哎,我们也稍微的提到过这里边的这个相关的一些,比如说print flex引initial手上这个我们也讲过这样的一些指令啊,也就是说呢,我们这个在讲这一章之前,其实呢,哎,很多这个指令呢,大家都是比较熟悉了。啊,那这一章呢,我们一方面呢,是进行一个总结啊,就是在实际开发当中,我们看在不同的场景下都有哪些参数呢,是我们通常要进行设置的,这里边儿相当于是一个总结。
02:04
那么另一个另外一个角度呢,就是我们从这个理论上呢,也要给大家去讲一讲,这个参数的话呢,诶都有哪些类型的啊,我们呢,在写的时候呢,这个应该符合这个格式,那格式呢,写错了,那肯定运行的时候就报错了,对吧?那从理论上呢,我们要讲一讲啊,那前面呢,相当于是先讲过实践了,现在呢,我们来讲这个理论啊,就跟说呢,我们先挂了世界才能有世界观。好,那这呢,我们就先来看第一个问题,就是都有哪些具体的这个参数,这个呃,就从这个理论上来讲呢,呃,都有哪些类型的这个参数啊,那这呢,我一共化成了叫三种类型,类型一呢就是标准的参数类,那参数选项啊,类型二呢就是杠X的啊,类型三呢就是杠XX的对吧?啊那这三种里边呢,第一种叫标准,那杨文静呢,剩下这两种是不是就是非标准的呀?哎,没错啊,下边这两种属于非标准的啊,什么叫非标准,一会儿说啊,那另外一个呢,就是大家看看这三个当中呢,我们前面呢,讲的那么多一些运营式参数的一些设置啊,大家呢,用哪个用的多呀。
03:05
哎,是不是我们用的这个第三个要多一些。啊用第三个要多一些,那一会儿呢,我们重点要讲的呢,也是这个第三个啊好,那这呢,我们就按照这个顺序呢,先来讲这个第一个那叫标准的参数选项。那标准的参数选项,它的特点呢,哎,就是比较稳定。后续的这个版本当中,基本上也不会变化的啊,这就属于一个叫标准的,它的特点呢,就是以这个诶杠开头啊,以杠开头后边呢,当然就不是X了,对吧,那是X呢就成这种了,2X呢就成这种了,所以呢就是一个杠开头的啊行,这呢就是它的一个这个特点,所以呢就是很好区分啊嗯,那这里边呢,我们涉及到哪些标准的参数选项呢?哎,这呢我都罗列出来了。啊,有这样的一些啊,这样的一些,哎,当然呢,也可以呢啊,比如说这个a win啊调错了啊,这个AVR一下啊CMD这呢,我们输入这个Java啊,或者你输入这个Java-help是吧?哎,这个打印出来的数据呢,也都是一样子的,这个里边呢,给我们呈现出来的啊,其实就是咱们的这个标准的这个情况。
04:08
那你看这里边列出来这些就是我们这里边所指的这个叫啊,标注的标准的这个参数选项啊,那这里边的话我们看一看啊,比如说这个叫哎杠server啊,就是启动我们server这种模式下的这个虚拟机,嗯杠class pass,哎我们来设置这个,呃,这个炸包啊,或者里边这个加class文件呀,哎,它的这个路径的。还有这个,哎,G were boths啊,这个也见过,然后gun wash啊,这个也见过啊,还有这个,这不用多说了啊,刚才我们就用这个指令了,包括在Linux啊,阿尔萨斯啊里边,通常呢,我们去帮助啊,都是用的这个g help啊等等吧,哎,这样呢,就是我们涉及到的一些就叫做标准的,哎,整体上来看的话呢,我们用标准的相较于下边两种类型来讲,它呢算是比较少的,对吧?诶我们用的相对来说是比较少的啊。好,那在这个里边呢,咱们前面呢,其实也提到过啊,讲上篇的那个执行引擎的时候,咱们提到过这个server和这个client这两种模式啊,稍微的再回顾一下啊,咱们在这个命令行这块呢,大家去输入Java gun version,当然杠version本身也是一个标准的,对吧?哎,刚才这边也提到了这个version的问题啊,然后呢,这个时候我们做一个回车,此时呢,大家就能看到咱们现在呢,呃,相当于使用的就是这个server虚拟机的这样一种模式啊,对应的其实就是我们这个server了。
05:25
那这个还有另外一种模式呢,叫做可LAN啊,咱们在讲上篇的时候呢提到过,这时候带大家稍微回忆一下啊,这个可LAN的话呢,我们也称为呢,叫C编译器,这个server的话呢,那咱们也称为呢,是不是叫做C2编译器啊。哎,这两两种情况啊,那这个C编译器是什么场景下用的是它呢?哎,我们说32位操作系统默认就是它,那如果让你在32位操作系统上想用这个,呃,Server的话呢,你得保证有两个以上的CPU和2G以上的物理内存啊,才可以设置成这个server模式,而这个server模式呢,在这个64位的操作系统上呢,是一个默认行为。啊,是一个默认行为,而且呢,我们也哎不能把它再改成64位系统上的一个这个这个叫什么client这个模式了啊,那这两种模式的这个区别是什么呢?这个C编译器啊,C2编译器啊,其实主要就说它俩的一个区别呗,咱们讲这个上篇的时候呢,其实提到过啊,这个C编译器呢,针对这个词解码呢,我们说进行的这个优化呢,它比较简单。
06:19
啊,你讲它适用的这个内存呢,是不是也比较小是吧,所以呢,它的这个优,这个优化的话呢,也比较简单啊,那这个耗时呢,主要是这个time啊,时间呢是比较短的,但是我们这个CR的话呢,它这个哎耗时的就比较长,那它这个整体的优化呢,就比较好一些啊,包括这个激进的一个优化啊,这样的话呢,使得我们整个代码执行这个效率是吧?啊rate啊这个效率的话呢,就会更高一些。OK,这个呢,就是他俩的这样的区别啊,包括呢,我们提到那个优化的时候,还提到这个CA编译器的话呢,它能够针对我们这个呃资金码进行优化啊,可以考虑的就是比如说方法内联呀,呃去虚拟化呀,这个冗余消除啊啊这是这个C1的这个特点,那这个C2的话呢,是我们重点要提的。
07:02
当然呢,我们提到说在这个CR这个模式下,哎,我们才支持什么呀,哎是不是叫逃逸分析呀,啊要想逃逸分析的话呢,得保证你是一个server的这样一个模式啊,那基于逃逸分析的话呢,我们可以做这个标量替换呀,这个站上分配呀,同步消除啊,哎这个咱们讲这个上篇的时候呢,跟大家都提过这样的一个事情。OK啊,那关于它这个官网介绍啊,你打开这个文档也能看一看,在这呢我就过了啊,那么关于我们这里边的第一种叫做标准参数选项,诶大家整体上呢,做一个了解啊,因为我们用的呢,整体上是偏少的,哎,知道这样一种模式就可以了。
我来说两句