00:00
下边咱们来看一个关于string table的一个垃圾回收问题,那这个问题的话呢,实际上呢,也不是一个陌生问题了,咱们在刚才演示这个int的一个空间使用效率的时候呢,呃,这块我们已经提到过这个垃圾回收行为了,对吧?呃,实际上呢,我们说也正是因为我们这个string呢存在着垃圾回收行为,所以呢,才使得咱们调离int方法呢,从空间上来说才可以节省。对吧,那你要没有说这个垃圾回收策略的话呢,你像我们上边这块扭了这个磁针了,下边这块你也扭磁针了,按说呢,就没有省这个垃圾回收的,呃,就没有省这个内存空间的一个情况出现了,这所以出现了就是有因为我们调in特以后呢,使用的是字符串常量池里的,那你这块前边这个堆里边的这个对象呢,我们就会存在这个回收策略了,诶其实已经出现过这个垃圾回收了,对吧?那只不过这块呢,咱们又单独的写了一个代码呢,诶通过这个代码呢,大家再来体会一下而已,行,大家看一下我这儿呢,是写了一个for循环,非常简单,在里边呢是string.value of,然后掉了一个int方法,那这个value o呢,打开以后这呢,咱们因为里边放的是一个整形,所以呢调的是这个,呃,String里边这个再去调呢,就调inte里边这个图string方法,那inte这个to string方法里边的话呢,大家会发现最后呢,我们又去new一个string。
01:12
呃,又会new个string,那相当于呢,最终结果就是还是掉了我们new string的一个是不是叫to,呃,这个in inter方法了,那整个这个操作呢,那其实跟咱们刚才这块测试的,呃,用一个string,然后调一个in的方法,其实上是一个套一个套路,对吧?诶一个道理的意思,行,那么针对我们这个代码的话呢,这块我设置了这样的几个参数,那这个前面的话呢,是设置咱们对空间的一个初始和最大的一个大小15兆,然后后边呢,叫print j c details,以前呢,咱们讲这个对空间的时候呢,也讲到过这个参数就是能够打印出来咱们垃圾回收的信息啊样JC啊for j c或者major jc对吧,以及的话呢,我们圾回收完以后呢,堆空间啊,新生代啊,老年代啊,甚至说包括圆空间啊,它的一个,诶,空间占用的一个大小的显示啊,就是我们这个参数呢,能够实现的,那通过这个例子呢,咱们主要给大家强调一个,就是有一个叫print string table的statistics。
02:06
啊,就是来显示打印一下我们这个自大常量池里边这个统计信息,诶就是这样的一个道理,行,那首先的话呢,我们把整个这个参数啊,咱们可以先呢给它注释掉,哎先注释掉,就是我不要这个for循环的情况下呢,我们把这个参数呢,CTRLC先呢添加到我们这个位置上,哎,现在呢,咱们用的这个都是这1.8的这个环境。那这块跟这个环境呢,也是没有关系,对吧,当然我们这块呢,也稍微的看一下是在哪个场景下运行的。哎,针对我们这个j c test,然后CTRLV把参数呢粘过来,OKOK,行,先跑一下。嗯,出来了,那这时候呢,显示出来,诶先看上边吧,上边的话呢,你会发现呢,咱们当前这个执行没有出现过任何的JC信息没打印出来,所以说就没有过垃圾回收,这呢是这个对空间的一个占用啊,咱们不关心,诶在接下来的话呢,我们看到下边关于咱们这个叫string table的一个statistics啊,就是它的一个统计信息啊,然后接下来。
03:01
哎,这呢,我们把这个参数呢,给它标识一下是吧,我这块定一下,这呢就是我们当前这个情况下呢,对空间当中它的这个租这常量池里边看维数维护的这个个数,接着呢,咱们把它呢打开。打开以后呢,我们跑一下这呢,我们是循环100次。嗯,循环100次对吧,循环100次呢,出来以后我们看到这个结果呢,是这样子的。嗯,这呢是1855,那刚才的话呢,我们这个是1753,那比较明显的就是它涨了有一个100是吧,就是我因为我们现在这是不是循环的有100次,当然在这个过程当中呢,还会额外的有需要的新的几个字串,所以呢,你会看到稍微的多两,哎稍微多两行,这呢都是正常的,那我们这块呢,相当于是常量池里边就多了一些这个租串,OK啊这样的情况,然后再接下来的话呢,我们把这个数值呢,给它调的大一些。哎,多加两个零,那此时呢,是不是就1万啊。哎,在1万啊,那1万的这个情况下呢,我们再去做一个执行是吧。
04:00
嗯,出来了,这呢是11700,那这个呢是也是一万多,然后上面这块呢,诶也没有发生这个JC信息,那说明呢,我们这块呢,也还没有执行过这个垃圾回收,对吧?哎,咱们再补一个零。嗯,再来做一个执行,现在呢,是不是就10万了,行,那么在10万的情况下呢,你看这时候呢,我们显示的这个就不足这个10万了,这呢是不是只有这个六万多呀,OK,那我们再往上看,大家会发现呢,上面是不是有过这个叫GC信息,诶我们现在是一个叫这个星代的一个样JC,那样JC以后呢,使得我们这空间从这么多一直降到这么多。啊,也就说明我们是存在这个string table的一个垃圾回收行为呢,那使得我们这个对空间中的,诶你这个字符串呢,它这个信息呢,还降了下来。OK,没问题对吧,那其实这个例子的话,跟我们刚才诶还是那意思,跟刚才呢举的这个例子啊,它其实是一脉相承的,哎,都涉及到了我们说这个砖的一个垃圾回收行为啊,那这块的话,大家就关注一下我们这个参数就可以了,那这个参数呢,咱们后边呢,讲到这个下频这个性能的监控和调的时候呢,咱们会讲这种命令行的相关的一些这种参数的,呃,Java虚拟机运行参数的一个命名规则是吧,像这种的话呢,它呢加号表示的启用的意思啊,默认情况下呢,这个参数跟这个参数呢,都没有启用加号呢,就是把它们用起来打印一下这个相应的呃一些信息是吧。
05:20
哎,你要是不启用的话呢,就给它减,改成一个减号就可以了,OK啊这呢,就咱们说的这个垃圾回收行为。那OK,那我们就说到这儿。
我来说两句