00:00
好,那关于这个j stack呀,咱们就告一段落啊,那下边咱们看下一个叫做JCD啊,叫多功能的命令行,哎什么意思呀,来我们看下这个基本使用。说呢,在这个JDK1.7以后啊,新增了一个命令行的工具叫JCMD,它是一个多功能的工具,用来实现除了前面的j state之外的所有命令行的功能。啊,J就我们显示这个堆空间的那个信息的啊,我们这个JCMD能做什么呢?比如它用来导出这个堆啊,比如我们这个堆文件是吧?呃,查看一下我们内存的使用情况,查看一下这个Java的进程导出现程的信息,执行GC啊,GM的运行时间啊这块呢,这些操作我们在前面呢,讲解的这些指令当中,是不是我们多少呢?是不是都有所展示啊啊,那这个CMD呢,就相当于诶你看我这放了一个图。就相当于是一把瑞士军刀啊,就是我们需要的前面的像j infer呀,呃,接呀,这个接呀,这个接map呀是吧,接stack呀,这样一些功能,我们一个JCMD呢,就都可以搞定啊,一看这个图你就很清楚了啊,那这个官方文档这个打开你愿意看就看看啊,这个我就过了说这个JCMD呢,拥有这个解map中的大部分的功能啊,J map呢,就是我们导出这个堆转储文件的是吧。
01:19
包括呢,还查看一下我们这个呃,这个文件当中到底生成了多少的这个对象啊,以及呢,占用空间大小啊这个呃黑to是吧,诶这样的功能呃,绝大部分功能JCMD都有,所以呢,官方上也在这个官网上呢,也推荐我们使用JCMD呢去替换map,那挺有意思啊,我们前面讲了这么多,最后呢,相当于是可以用这个JCMD呢进行一个整体的替换了啊成这个意思了行,那下边呢,我们看一下这个JCMD使用的个基本语法啊。哎,CS啊清一下,嗯,首先的话呢,我们在这里边去输一下JCMD,我们看能出来什么。好好,这时候我们看确实能够出来一些这个信息是吧,这个信息是什么呢?你看这个呢,是你看你这这个这样对比吧,我们输入一下这个叫JPS是吧。
02:05
来啊,JPS加一个杠L吧,这样是吧,呃,这里边呢,你看我们这个,呃,15484啊,这个一样的啊呃,实际上呢,对应的就我们这个idea了啊,然后呢,这个JCMD,就是当前这个CMD呢,JCMD呢,其实也是个进程啊,类似于我们这个GPS也是个进程一样啊这个launch的,呃,Launch的其实就我们上边这个这个了是吧,哎,这个14548啊,就它呗。是它是吧,当啊后边呢,就是它相应的一些这个传的一些这个参数了啊行,那这呢就相当于是我们这个JCMD呢,直接这样书写,其实就类似于我们写这个JPS一样啊,你要加上杠L呢,就是显示的就更完整一下这个操作的一个路径了,是吧?啊这是我们说这个JCMD,那如果我们想看一下这个这个叫什么帮助的话呢,你输入这个杠H。看这出来了,或者CMD呢,我们来杠help。它一样是吧。好,那这边呢,我们看下这个JCMD它如何去使用啊,嗯,这里边呢,就是具体的这个JCMD有个杠L啊,杠H啊等等的这样的一个行为是吧?呃,这样一个情况啊,这块呢,就是一个基本的一个说明啊,那我们再来看一下我这个课件的这个位置写的这个JCMD-L,列出所有的GM的进程。
03:17
啊,这里边儿,比如我们让这个程序起一个吧,就比如就比如说我们刚才上面演示这个j sta的时候,这个思索的这个程序啊,我们把它俩跑起来。行,那这呢,相当于是有一个这个死锁的一个程序的一个执行啊,他呢就先执行着,那我们过来之后呢,诶大家看这个接CMD-L。接CMD啊,杠L。那其实跟我们刚才没有加这个杠二实际上是类似的是吧,这个呢,其实就可以看作是类似的替换咱们这个,呃,GPS的这样一个操作。能理解吧,啊GPS咱们是不是还有这个杠M,就是这就传那个具体的参数吧。是吧,还具体传递个参数的一个情况啊好,这个呢是说清楚我们这个哎杠L就能替换咱们这个JPS这个操作,还有呢,就是接SCMD有一个PID help啊它呢可可以显示出来针对于指定这个进程有哪些的,那哪些指令我们可以去使用的。
04:14
比如说啊,咱们这儿呢,是不是有8320这样的一个进程是吧,好你看我这个啊接CMD。咱们看一下啊,首先呢,把这个8320写上,然后呢,我们来一个help。哎,来个help行,那我们的followingings,哎,这个接下来的这些指令呢,我们就可以去使用了,哎,你看我们这里边列举出来了这么多是吧?哎,那下边的话呢,就是具体的使用怎么用啊,我下边列举出来了,就是大家呢,可以通过这个JCMD把这个进程ID输入,输进去之后呢,就写你具体这个指令,这个指令呢,就是我们刚才通过这个help呢,查出来的这些指令,这呢,我是列举出来的一些常见的一些指令都有哪些啊,但是并不是说每一个这个参数都适用于所有的进程啊,那你呃,指定的这个进程适合于哪些呢?你就调一下这个号就行,所以这个指令是不是还蛮有用的,对吧?哎,这个指令大家记一下啊,好好,那下边呢,我们就来测试一下啊,比如说这个JCMD,我们看看有哪些可以去测试,先把我们这个8320这个进程呢先写上。
05:17
然后呢?好了,大家看一看我们有哪些,呃,就是可以体现替换咱们之前的这些操作的,比如说我们先看这个吧,叫thread点啊。哎,之外的点print相当于打印我们这个是不是现成的这个信息啊。好,我这执行出来了,大家看这个操作呢,是不是跟我们刚才那会儿讲的啊,讲的谁呀,接stack哎,我们去查看的时候这个情况呢,是类似的呀。哎,我们看刚才讲这个接stack的这个时候。假大这个时候呢,我们是不是就呃这个通过调用这个j sta能够查看当前这个程序是不是存在这个思索,你看我们刚才这个通过thread这样的一个操作呢,是不是也告诉我们这是有这个思索的是吧。
06:01
哎,有这个思索的,哎,我们现在演示的不就是这个程序嘛,啊,所以说这呢,其实可以替换咱们说的这个,呃,接stack了是吧,好再接着呢,我们接CMD,然后呢把。320,如果你要忘的话呢,直接是不是杠L一下是吧,然后呢接CMD针对我们这个8320。哎,然后我们再来一个help啊。刚才呢,我们是这个print啊,然后接着我们再看还有其他的哪个可以去考虑这个替换的。嗯,比如说我们,诶那看这个吧,Jc.class啊,下划线啊,Hisogram啊这呢,不就生成这个直方图的这个操作吗。啊,就类似于我们前面讲的这个,哎,我们是不是前面讲这个黑O的时候讲了一个j map是吧。哎解map这个时候呢,我们是不是提到了一个关于这个叫黑O这样的一个操作嘛,哎,形成这个直方图的好,那就是过来我们做一个执行啊。哎,出来了,哎,大家想想是不是跟我们前面讲这个解map的时候呢,生成这个直方图是一样的这个效果呀,哎,就是你这个实例的这个个数,这个占用的内存的大小,而且还给你排了个序是吧?哎,按照这个占用内存大小排序,这是它的类型。
07:13
哎,就跟我们这个吉map宝黑O一样啊,嗯,跟黑一样了,我们看看它能不能生成我们这个大文件呢。呃,要生成大文件,是不是你要想这个操作呀。就他呗,是吧,那j c dump好,我们针对这个看一下啊。接CMD,然后呢,8320,然后把这个点右键输过来,那你还得指定一下这个文件的位置啊,比如我写到这个D盘下,嗯,咱写到看原来这个文件哈。啊,这是咱们原来的文件,那现在咱们整一个,比如说呃,6.hpro。写到这吧,嗯,OK,没问题啊,推车一下。好,大家看这时候呢,在左侧呢,是不是就帮我们生成了这样一个h pro这样一个对专文件了是吧?诶你看这时候呢,相当于我们就使用这个JCMD呢,替换了咱们前面讲的这个哎j ma了是吧?啊这个还是挺强大的啊。
08:08
啊接线D8320 help再来一下看看还有哪些。啊,这是这个端出文件的啊,Jc run啊,Jc run啊,其实也可能查看我们这个可以查看我们这个JC在执行过程中的这个信息,等一下。啊,Jc.run一下。呃,这个命令行的执行是成功的啊,就是我们这个,呃,这个呢,它只是查看我们这JC的一个执行情况是吧?哎,执行成功的行,这个倒没啥了,然后再来看一下这个吧,比如这个VM.up time。哎,这样。开车。好出来了,这块呢,相当于展示的就是我们这个进程,呃,这个进程它的执行的一个时间是吧?哎,这个执行时间,咱们这个执行时间在哪块测试过呀。哎,在哪块显示过呢,回忆一下。哎,这个应该是在我们这个。
09:03
哎,有一个杠T,就这是吧,接state啊接state里边你看我们有个杠T是吧?哎,然后这块呢,是不是就查看我们整个程序执行的一个运行时间了是吧?哎,那刚才呢,我们在讲这个接CMD的这个时候。有点长了啊,讲这个JCMD的时候呢,说这里边说除了这个呃J的之外的所有指令都够实现,哎其实啊,哎这块真实的情况呢,就是这个JCMD,它其实是拷贝了J里边的相关的一些代码了啊你像我们刚才看到那个呃,它这个JC-T那个操作,我们这里边是不是就也有是吧?啊只不过说呢,你要想像这个j state,咱们讲这个呃执行这个JC啊,程序执行过程当中呢,我们让它每隔这个多少毫秒呢,输出一次这个操作呢,循环的这个操作,哎我们这个接CMD呢,它是没有的啊,哎,这个注意啊,这是没有的。好看,还有什么呢?啊,比如这个啊,VM.system properties是吧,这个。
10:01
来接CMD啊,8320。哎,然后这样一下是吧,诶这个我们做一个回车哇,出来好多这个信息啊。是吧,好多类信息,这个呢,就是打印了我们整个这个系统的一些啊,它的一些什么呀,就是属性信息啊,这个咱们前面也整过啊,回忆一下在哪儿。应该是我们这个结音份里边是吧?结音份里边呢,你看这有一个叫杠诶c pros啊,PID啊,你看这里边这个指令呢,咱们已经快讲完了哈,这个大家呢,是不是有点懵呢啊,比如我们这个输入接iner,然后呢杠is pros啊,然后8320啊回撤一下。啊,这时候呈现出效果跟我们刚才这样。哎,跟我们刚才这些是不是类似啊。哎,就是他俩的这个功能是相当于是一个类似的一个情况啊,然后接CMD,然后呢,我们在8320,然后help。啊,还有这样一些情况是吧,嗯,还比如说有什么呢,这个VM-wson啊,这个我就不演示了啊,还有VM有一个flex是吧,这是一个什么,看一下。
11:06
8320。回车。啊,这块呢,你看显示出来的就是我们这个虚拟机是不是配置的相关的一些参数情况呀。诶,这你看使用的是我们这个并行回收,呃,并形的垃圾回收器是吧?诶这块呢,我们在前面的演示过程当中,是不是也呃有过这个相关的操作,获取这些参数的信息是吧?好,那综上所述的话呢,我们就能够知道这个JCMD呢,确实呢,是类似于一个啊,我们叫这个瑞士军刀一样啊,它实现呢,就是对我们前面讲的这些指令的一个整体上的一个一个替换是吧?所以呢,这里边在这个二官网上也推荐咱们用这个JCMD呢,去替换咱们这个map,包括呢,我们上述的一些相关的功能。啊,那这里边儿呢,大家稍微的去熟悉一下啊,熟悉一下使用一下我们这个JCMD啊就可以了,当然了,我们并不是说上面这个讲解就白讲了啊,只不过呢,就是我们上面这个讲解完之后呢,诶你知道呢,他用哪个指令去替换谁啊,那你就达到同样的效果了啊,那对应的我们其实还是要关注在什么场景下,我们到底用什么指令。
12:06
啊,只不过呢,这里多了一种方式而已啊好了,这个JCMD呢,我们就说到这儿。
我来说两句