00:00
啊,然后下一个问题呢,我们谈一谈,这个叫静态变量是吧,说这个静态变量它到底应该存放在哪?哎,我这呢是写了两个代码,那我们分别呢,想说明的是两个问题,好来大家看一下我们这个代码啊,首先呢来看这个代码,这呢是我提前已经写好了啊仍然这个代码不复杂,哎,我这呢造了一个静态的一个属性是一个字节数组是100兆,对吧。嗯,100兆行,然后呢,我这里边儿就是简单的把这个属性呢,做了一个输出,其实主要目的呢,就是我们希望呢,运行起来这个程序以后呢,看一下这个字节数组,它的这个结构到底应该存在哪啊,我们先来看是为什么我写两个代码呢?第一个问题呢,咱们想说明的就是你右端这块用的这个东西到底应该是放在哪。在不同的这个JDK版本当中应该放在哪OK,好咱们做这样的一个说明,那咱们呢,先演示一下这个在七当中这个情况,看我这呢CTRLC一下。CTRLC是吧,嗯,然后此时的话,我们先做这样的一个调整。
01:04
诶这呢是我们它九,诶这个还之前就是咱们设置过期啊行,这个不用改了,然后呢,再调整我们这个。嗯,我们现在呢,想看的是这个static啊。Static field是它把这个呢CTRLV粘过来,然后这个呢改成是我们的这个叫七。哎,改成叫七对吧,行,在七当中呢,我们用的还是这个叫永泳带这样的一个参数,我这呢是一共用的是叫300,这个300兆呢,是我们这个圆空间啊,不是圆空间了,是我们这个叫哎永纽带,然后200兆呢,是咱们这个叫对空间好完事,然后此时呢,我们做一个应用,我打印一下这个具体的这个内存使用的这个细节,好做一个执行。行这块呢,我们还不能用这个了,我把它呢得注意一下啊,要不的话我们看不着这个具体的这些信息了,是吧,打印信息把这个停一下。
02:06
好出来了是吧,好此时呢,我们看一下啊,咱们现在这个。New的这个对象,它的空间呢,是100兆啊,就是102400KB是吧,行,然后大家呢,你去看一下,嗯,这呢是咱们所谓的这个叫对空间。哎,堆空间这是他的一个新生贷,这是他这个叫老年贷,这呢是他的这个叫永久贷是吧?好,那在这里边我们看的话呢,其实你会发现呢,你看使用这么多显然不够吗?直接呢,咱们就找到了,诶这里边的这个数据102400K这个呢,其实对应过来是不是就我们说的100兆啊,也就是说我们用的这个呃,字节数组啊,放在哪了呢?放在我们这个叫老年代了。诶放到这个老年代是吧,行这呢是我们说这个七的一个情况,那六的话呢,咱们用的参数还是它,大家呢,可能会想说N6的时候呢,是不是就在这个所谓的叫呃永久带那呢,嗯,咱们把这个也可以做一个调整,现在我把它改成16。
03:04
对吧,改成是零六。然后在我们这个run这块。我把这呢也改成16。好,此时呢,我们再来执行。行可以了,那这时候呢,咱们再来看一下咱们这个所谓的这个老年代,看老年代里边是不是仍然存放的是我们这个字节输出。没问题,也就六跟七当中呢,都是放在这个叫老年代当中的。啊,六跟七都是在这个冷静带当中,行,然后呢,我们来设置一下这个八。来,CTRLC下。诶,先来改这个。嗯,针对他,然后呢,来改这个八。看上面这个参数是吧,CTRLV看圆空间,然后这时候呢,我们用的这个对空间还是200兆啊,正常是300兆。
04:08
执行。行,那现在呢,咱们看到这块已经改成叫源空间了,然后呢,我们这个对象啊,数据是不是仍然静态的,这个属性是不是仍然放在我们这叫老年代啊。诶,这大家注意是吧,诶说为什么我们看到这个678,诶都是在这个,呃对空结是吧,那有同学想,哎不对啊,这个不是说这个六当中还是在我们这个方法区嘛,说这个七跟八的时候呢,我们才放到这个所谓的对空间的是吧?诶这这怎么不一样呢,注意这个时候呢,我们说的是这个对象本身。啊,这呢,就是我上面想要强调的这样的一个结论,哎,大家看一下说这个静态的引用,它呢,所对应的这个对象就我们new的这个结构,哎,这个new的这个结构啊,它始终都是存放在堆里边的。这个对象始终是存放在对里边,也就是说只要是我们这个new的东西啊,啊,这个都是放在我们这个对空间中的,这是我们说的第一个例子,就是我们说的这个右边,然后第二个里呢,咱们再看这个左边这个变量叫AR2,咱们这里边指的呀,是我们说的这个变量名,也就这个引用名,哎,这个引用名呢,它是有一个位置的变化,主要呢,就是在我们这个G力八动呢,我们说是不是还是放在这个所谓的叫堆空间当中的是吧。
05:24
诶就这样个情况啊,行,那么这个事儿呢,咱们怎么来说呀?诶咱要使用一个工具,这个工具呢叫接HSDB,诶这个工具这个工具呢,实际上也是我们这个JDK呢,自带的一个工具啊,这个工具呢大家诶给大家稍微说一下啊,这个咱们就时间关系呢,不具体细节来演示,跟你说一下在哪呢JDK啊,我这呢是装了各个版本这个JDK,那么我们在1.8,咱们现在用的不都是1.8的这个环境嘛,在1.8的这个bin当中,大家去搜一下啊接HSDB这个时候你搜的话呢,你是搜不到的,没有是吧?嗯,然后呢,我们再换一个场景。
06:05
我打开这。JDK我找一下这个JDK99的这个B目录下啊,我在那再去搜一下。诶,你看这时候我们就搜到了,也就是说呢,我们这个接HSDB呢,它是在我们这个JDK9开始呢才引入的一个工具,那这个工具呢,主要目的呢,也是为了监控咱们这个进程的啊,这个进程的一些细节啊,有它一个工具,咱们现在呢,不是咱们重点讲这个的时候,咱们讲这个性能监控与调约的时候呢,咱们再来讲具体的一些工具啊,所以这块的话呢,我就把这个截图呢说一说啊这呢就是这个HJHSDB的这样的一个工作界面啊,实际上这个例子呢,我用的呢是呃,深入理解Java虚拟机里边的一个哎,书当中的一个例子。输入当中一个例子,大家呢,直接来看咱们这个代码就行。在这个程序当中啊,大家看一下这个程序当中呢,我这有一个静态的内部类里边呢,我们,诶这又生明了一个叫静态的一个内部类,叫object holder是吧?然后呢,我们是定义了三个对象,这三个对象呢,是处在不同的场景当中,这个呢是一个静态的属性。
07:10
这是一个非静态的属性,这儿呢是一个方法内的一个局部变量,我们现在呢关心的是这三个变量。对吧,这三个变量呢,呃,一方面它的对象呢,是放在哪,另外一方面呢,就是诶这三个变量本身放在哪。是不是很清晰对吧?诶三个变量本身放在哪,咱们其实更关心的是不是说这个static o,诶static object是吧,这个变量呢,变量本身它是应该放在哪儿呢?咱们想证明的是它放在这个堆空间中的行这块呢,咱们说这个工具是吧,哎,直接往下走。好,大家来看啊,呃,首先呢,咱们说明一下这个右边的三个这个对象,呃,就是说先看这个事吧,这个呢,显示的是咱们这个叫呃,伊甸园区的一个起始地址,这是伊甸园区的一个终止地址,沿岸G呢,就是起始地址和终止地址中间呢都是伊甸园区,然后呢,大家会看到我们下边的这个这个这个这三个啊,那对应的呢,其实就是我们这三个变量,哎,为了方便起见,我把它们仨呢,这样我盯一下啊。
08:15
好,大家看这里边的我们第一个这个static OB,这个OB街呢,就是我们这个对象它的一个地址,然后这个第二个呢,就是这个地址,然后第三个呢,就是这个地址,这三个地址大家看一下哎,这个他们记录的引用变量嘛,我们说它呢,保存的都是我们这个对象的一个地址值是吧,其实就是哈希值,这哈希值呢,其实就是你真正这个对象呢,在呃,你这个内存当中它的一个首地址值,大家你会发现这三个地址值都在我们这个范围之内啊,比这个范围呢靠右,比这个范围呢靠左。啊,你具体细节你可以看一下是不是7A啊这个。哎,前边是吧,呃7F,然后32C,看32C后边以后,哎,从这块开始,他们有不同的。
09:00
那这个值呢,是落在这个范围内的,那沿IG呢,我们证明的就是这三个对象的实体,它们呢,是不是都应该是放在这个对空线当中的。没问题是吧,哎,就是我们只要是new的对象呢,都放在对空间中,哎,这句话呢是对的。好,这是我们说的第一个事情,然后呢,我们再来谈一下,说这边哈,说这里边呢,我们这是不是有一个叫这算是一个叫成现变量呗,这个成现变量放哪呢?说这个成员变量,它是随着你这个test的对象实例是放在对空间中的,这个大家应该都懂。啊,你学这个Java语言的时候呢,都说过这那叫成现变量,非静态的,它呢是肯定放在堆里边了是吧,不都说而我们这个呢,是方法内的一个局部变量,这个局部变量呢,是应该放在你这个fo这个方法对应的战争的这个局部变量表里边的,这也不用多说吧,哎,现在咱们重点关注的是不是这个叫static obj啊,哎,就是看它应该是放在哪,OK,好,再往下看说呢,接着呢,咱们找到了一个引用该static obj这个对象的一个地方。啊,就是我们这个大的class的一个实例里边,然后这儿呢,就找到了这个实例啊,在这个实例里边呢,确实就看到了咱们这个变量啊,你看这个变量呢,是它,它的地址呢,是这个值,这个值呢,你看这个458不就是我们刚才诶上一个PPT里边说到这个458,哎就是它是吧,诶我找这个地址了,而这个变量呢,本身是放在我们这个对象里的,而这个对象呢,是放在我们这个堆空间当中的。
10:25
啊,这个对象呢,是放在我们这个对空间中的,哎,进而的话呢,我们实际上就证明了,哎,我们这个代这个obj这样的一个变量本身啊,也是放在我们这个对空间中的。啊,就是在JDK机七啊机以后的这个版本当中啊,把这个编一下house power虚拟呢,选择把静态变量与类型在Java语言一端的这个映射的大的class这个对象主要是对象,我们都放在堆里边,它们放在一起存在这个对空间当中,实验呢,咱们也证明这个点啊,它确实呢是在堆里的行,那这儿呢,咱们就通过一个实验的方式呢,做了一个明确,那这个实验呢,呃,咱们也是来源于这个叫深入理解Java虚拟机啊这本书当中的这个案例啊,那至此呢,咱们把这个结论呢,就算是完全的给他盖棺定论啊,确定下来了。
11:13
好。
我来说两句