00:00
好,那我们在介绍完这个相关的这个工具的一个概述之后啊,我们分别来介绍一下儒家的这些工具,那首当其冲的呢,就是我们GDK呢,自带的一个比较简单的工具啊,叫做j conso啊叫做j conso,好,那么j conso的话呢,我们首先呢,来看它的一个介绍。哎,来看它的一个介绍啊,那这个介绍里边呢,说到了这个j council呢,是从这个JDK5开始啊,就集成到我们这个JP当中了,它对我们GM的一个内存啊,包括线程啊,当然这个内存呢,一会大家看你会发现它分的也是比较细致啊,堆空间里边又分成了伊甸园区,Survivor区啊,然后这个呃,方法区呢,我们有这个具体的源空间啊,代码缓存呃,压缩类啊等等,分的比较细,它的一个内存的一个走势情况,包括呢,我们整个程序的这个进呃线程啊有多少个,然后每一个线程是什么,然后呢,一共加载了多少类啊等等这些数据呢,都会做一个监控。
01:00
啊OK,这呢是我们说的它,然后呢,官方呢也有一个文档啊,就是对应我们这个叫几cons的一个文档啊,这块呢,这个我已经打开了啊呃,大家呢,把这个地址呢输进去之后呢,那就能看到关于这个j councilo啊,Oracle官方的一个使用的一个文档,大家呢,也可以按照这个文档的说明呢,去学习一下啊,这个文档你看还稍微的比较长一些是吧,里边有一些这个图片啊,介绍的也稍微。比较详细一些好了,这块呢,我就不带着看它了啊。然后下边呢,我们说一下这个如何去启动咱们这个解cons so呢啊启动的话呢,当然呢比较直接了,咱们说了在这个B目录下已经存放了这个解抗O,直接双击就行,对吧?诶或者的话呢,大家直接在这个CMD当中你去输入啊这个解console,因为呢,我们已经配过这个环境变量了,通过这呢,是不是也可以调用出来啊。啊,没有问题是吧,好,那下边呢,我们就来演示一个Java程序的执行。啊,这呢,比如我们就看一下这个hi instance test啊来看下它,然后这个程序的话呢,我们也是提前呢,先把这个参数呢给它配上啊,这个参数呢,我其实已经都配好了啊,大家可以稍微来看一眼。
02:09
这个呢,咱们针对的是呃,CAPTURE03是吧?呃,这个module里边的啊,Hi instance test,然后我这个参数已经放进去了啊,这个参数呢,咱们前面已经讲过是吧,好OK,然后呢,我们把这个程序呢给它,哎,跑起来。嗯。那抛起来之后呢,我们回过来,哎,大家这时候呢,我们。你看这时候还看不见是吧。现在也没有没有一个刷新哈。没有刷新的,咱们就这个给大家取消了,重新的这块点一下啊好这时呢,我们就能看到这个he instance test,那这里边这几个选项呢,诶大家看实际上是不是就类似于我们这个。上一章当中讲到这个GPS是吧,能够查看查看我们当前这个Java的这个进程,你看都有几个。啊,这呢,能够看到我们连接方式,你看是不是有本地还有这个远程啊,哎,那咱们先哎把它先点一下吧,啊先进去啊然后的话呢。
03:08
大家来看一下咱们这个几conso,呃,启动这块呢,已经说过了啊,它的这个连接方式。连接方式这块呢,我们会看到有三个选项啊,一个呢就是本地连接啊,还涉及到有远程连接,还有这个advance的一个更进一步的连接。本地的话呢,就是咱们刚才选择这种方式啊,哎,注意这时候呢,它还支持这个远程连接啊,当然呢,你需要去做这个GMS的一个代理啊,就是我们这个GM的一个扩展机制了,哎,需要指定一下你远程的这个IP地址,哎,端口号,哎,包括呢,通过我们这个环境变量啊,还需要去设置一下这个,诶creial是吧?诶指定一下用户名和密码进行授权之后才能够进行一个远程的连接。啊是这样子的,那么关于我们这个本地连接的话呢,也有一个需要注意的点是什么呢?就是我们运行当前程序的。啊,我们这个程序是吧,运行当前这个程序的呃,用户跟我们当前启动这个J康的用户呢,得是同一个,那我现在的话呢,当然就都是诶宋洪康是吧,这个用户这个运行的Java程序,然后启动的这个j councilo啊只要是一个的话呢,它就可以呢进行一个连接了。
04:17
好,那进来之后的话呢,大家会看到这里边的话呢,有这样的几个选项啊。分别对应的叫概述内存线程类啊,虚拟的概述和min啊,这样的一个选项主要是六个啊,我们主要关注的就是前五个了,那首先的话呢,这个概述里边,呃,就显示了我们你看堆内存啊,这呢是一个整体上一个说明啊,堆内存的一个使用量。啊,它的一个使用量,然后呢,这是关于我们整个程序执行过程当中,一共加载的类的个数啊,1728个。啊,这个因为我这个WIN10系统跟它这个呃版本不太匹配哈,啊,咱们用的是JDK8啊,你要用这个JDK版本新的话呢,这个匹配度应该会更好一点,分辨率的问题啊,所以大家看的话,这个字太小啊呃,这个我还能勉强看清楚1740个啊行,然后这呢是展示出来我们整个应用程序的执行过程当中,哎,加载的这个线程的这个个数。
05:14
这呢是CPU的一个占用率啊,这个波动性还挺大的哈,行,然后第二个呢,这个叫内存的一个概述。啊,这个内存概述呢,大家去想谁啊,咱们上一节中讲的这个JS date是吧。啊j it只不过呢,这个J呢,咱们这个使用那个inter那个参数呢,可以每隔几毫秒,哎,我们去这个获取一次这个对空间的一个内存使用情况,而我们这里边呢,是不是连续监测呀。啊,连续检测啊,这也是相较于我们命令行的一个比较好的这个方面啊,那么在我们这个内存这块呢,它显示的这个信息呢,你看一共是八项啊八项呃,整体上来看呢,一个是叫堆内存啊,其实大家点这也行啊,那这也正好是八项嘛,这个是显示这个堆空间,堆空间呢,咱们一共呢,呃,在这儿呢,咱们是不是一共有600兆是吧?哎,所以整个这个堆这块呢,就相当于是有600兆啊。
06:07
然后这个呢,叫飞堆飞堆啊,飞堆这个使用量啊,整个的话呢,呃,是有这么多。在这块呢,是有展示的啊哎,有展示的行,嗯,然后的话呢,我们在这个堆空间里边呢。稍等。啊,这个已经断开了啊,因为我们这个程序呢,到一定程度之后呢,它就报这个对空间的溢出了,咱们再把它跑起来。哎,我咋说这不动了呢是吧。我们再选一下啊,因为这是我们这个进程呢,是一个新的了啊。所以需要重新的选择一下。把这个干掉。好,那接下来是我们这个内存的这个情况啊,这个内存这里边呢,这个是我们这个堆的一个占用情况,然后这块呢,是我们这个叫A非堆的一个占用情况啊,在这块也有显示,那堆应呢,具体的又分成呢啊,那第一个这个这个柱状图呢,它对应的是我们说的叫哎老年代啊,你在这也能看到啊老年代,然后中间这个呢,是啊一甸区啊,右边呢是我们的这个survive区啊,外区显示一个就行啊,因为它用的是这个复制算法是吧?另外一个是空的哈,然后这个非队里边呢,分成了这样三部分,第一个呢是Meta space原空间,还有呢,我们这个代码缓存,哎,还有我们这个叫啊压缩类啊这样的几个部分啊好了,那这时候呢,我们大家会看到呢,在一点园区里边,你看咱们这个数据呢,依次往上涨啊,这里边我们的一个分配情况呢,呃,咱一共是有。
07:39
咱一共是有这个600兆是吧,哎,然后这呢,有一个伊甸园区和survivval区的一个比例啊,新生代老年代呢又是1:2,那整个呢,我们呃,算一算,老年代这块呢,应该是有这个400兆是吧。然后这个呃,伊甸园区的话呢,应该有160兆,哎,Svival区其中的一个啊,它应该是有20兆,哎这样的一个比例情况,哎大家应该清楚对吧?好,你看这时候呢,我们会发现呢,当我们这个survivor区啊,这个伊甸园区每次呢,你看达到这个一百六的时候呢,就满了,是不是整个直接降下来是吧,然后再升上去,升上去以后呢,是不是哎又得降下来。
08:16
哎,又得降下来啊,你看那接下来就得往下走了。哎,降下来了,好,那这个数据的话呢,就统一的都放到了我们这个,哎叫哎O的区,那O的区的这个数据,那是不是就是这种折现的方式往上涨的,对吧?啊当然了,我们这呢也可以显示的啊,你看我们点一下这个直行JC。啊,我点一下啊,这时候就强制的去执行一个JC啊,它直接就哎这个清理的这个数据了。好,这是我们说的这关于呃内存这个层面的一个情况啊,呃再往下的话呢,这叫线程,这呢列举出来我们整个这个程序在执行过程当中,哎目前呢,哎跑到线程都有哪些啊,这呢显示是有,呃这个峰值是15个,现在呢是有12个是吧?那12个呢,你再数一下,就是这12个,其中呢,就有我们这个内线程。
09:03
啊,这块也是不会不是很清楚啊,适配的不是太好了,哎,看不太清楚,行呃,这呢是咱们这个主现场,然后后边这块的话呢,哎,这个现场一会咱们说一下还可以检测词索啊在后边这块呢,是显示了整个我们这个程序在执行过程当中加载的类的啊个数啊,我们像这里边呢,当前你这个类啊,还有呢,我们这个呃,相应的字节呃,数组对应的这个类,还有我们这个thad类啊,Release类等等啊这个我们这里边儿有很多类的一个加载啊,包括这个异常的相关的一些类,对吧,一共呢,是有1700多个啊。然后下边呢,是关于这个虚拟的一个概述信息啊,虚拟的一个版本啊供应商啊,这个写的还挺细啊,程序的一个运营时间啊,咱们在这个JS data里边那个杠七参数里边,呃,也能获取运行时间对吧?哎,总编译的时间啊,当前的这个呃,活跃线程数是12个,峰值15个,手物线程11个啊因为呢,呃,除去守护线程就是我们那个魅线程了,对吧。
10:03
啊,加载的当前类的这个个数啊,当前堆的大小一共我们设置了有600兆对吧。哎,然后这块呢,还显示了我们这个新生代啊,老年代使用的相关的垃圾回收器啊,以及呢,垃圾回收收据的这个次数。好,大家看到这时候呢,是不是出这异常了,哎,然后我们看下这个内存啊,整个这个情况的话呢,哎,是不是我们这个O的区已经满了,哎所以这时候呢,就报我们整个这个哎叫哎OM是吧,哎这个问题就出现了啊。哎,这个我们先就不连接了,哎,这个概述文件呢,哎,就是这样的一个情况,下边呢,还列举出来了咱们设置的相关的一些参数,你看这块都有对吧?哎,咱们在讲命令行的时候呢,是也通过相关的指令能够获取的,哎,包括下边这些信息我们也都可以获取,是吧?所以呢,使用这个图形化界面的方式呢,确实要好于咱们的命令行的方式,哎,但是呢,我们说命令行是那些命令行的这个基本方式呢,大家也需要掌握啊。
11:00
那另外呢,咱们再说一下,刚才提到那个线程里边那个,呃,检测磁索的问题,这呢还是咱们讲这个j stack的时候呢,写的这个磁锁的问题,大家呢,把这个程序呢给它跑起来。然后呢,我们这儿呢,再去新建一个连接,哎,找到咱们这个,呃,Thread啊,Deadlock啊,做一个连接。好,那连接好以后呢,我们直接呢,来看这个线程这块,当前呢,这一共是有16个线程啊,这个字稍微有点小啊,那16个线程咱们知道呢,这里边儿,呃,咱写的这两个呢,确实构成词索了啊,你看我们这时候做一个检测啊,啊一点。好。这个时候呢,你看给我们提示的有个死锁啊,这两个线程之间他们彼此互相调用啊,这块因为适配问题看的不是很清楚啊,啊这块呢,已经很明确的告诉我们思索了,所以呢,咱们通过这个T桑j councilo呢,诶可以做这样的一个检测啊。嗯,这儿呢,就是咱们说的这个j councilo,整体来看的话呢,其实比较简单,就这些基本的选项啊,主要大家关注的话呢,就是这个内存的一个走势图,以及呢,我们这个线程这块呢,可以用于检测这个死索啊,主要呢也就是这些啊,当然呢,你关于这个垃圾回收的这个频率啊,花费时间呢,也能够在这看一看啊就可以了啊。
12:19
行,那几康的话呢,整体大家做个了解就行啊,我们就把它呢就说完了。
我来说两句