`
RednaxelaFX
  • 浏览: 3013644 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

Java虚拟机分享演示稿2010-12-28版

    博客分类:
  • Java
阅读更多
内容见附件。
这玩儿转成PDF之后愈发巨大,下一版可能不用7-zip压一下都无法传到JavaEye上做附件了呢。

该演示稿的前两版本在关于Java程序的执行的一次分享一帖中可以找到。
这次的更新主要是加了些图,讲解Java程序与JVM的一些“接触面”、整个执行的步骤、HotSpot中的对象布局、线程之类的。还有很多页仍然是空白的没把内容填进去。总之慢慢来吧,还会不定时更新的。

对内容有建议、疑问的都请在这边回复,欢迎拍砖 

嗯,另外想提一下:
这组演示稿里从别的地方引用来的图基本上都有给来源的链接或说明,如果写漏了的话请联系我。而多数的图表是我画的。
欢迎转载。转载前如果能先与我联系的话我会很高兴 ^_^
并不期望别人引用了之后也都指明出处是这里,但最低限度请转载者不要声称那些是自己画的。


使用过我这组演示稿中的图片的帖,友情链接:
JVM学习笔记(二)------Java代码编译和执行的整个过程 / JVM学习小结
分享到:
评论
31 楼 twsxtd 2017-03-31  
Jefen 写道

RednaxelaFX 写道

.....
公司网络有文字限制,太多了,发不出去,能省则省....



感觉群主的解答...
首先我们把那四列表格定义为1,2,3,4

关于问题1,按照LZ的意思,我理解了下,然后按对照图例重新描述了下,不知是否正确?
第1列为Int对象,GC时可以统一处理,
第2列为第1列对象所对应的元数据,也是Int的kclass对象,里面存放着gc关心的一些信息,按照图的理解,不同的Int对象,其_klass字段都是对向第2列的,那么第二列存放在的应该是公共信息,是实例无关的,原先我以为他是一个int的类定义,但现在看来好像不是,
同时,由于他又是一个对象,所以该对象也是由gc直接管理的,因此他也会存在一个_klass字段直接该kclass对象的kclass对象,即第三列
第3列即前面所说的kclass对的kclass对象,里面存放kclass对象的一些gc相关信息
第4列为第3列所描述kclass对象的kclass对象,同时避免无限循环,定义了kclasskclass对象,用于描述其上一级及之后的kclass对象,该内容无类型的区别,类似于通用指针的抽象概念

这里有一个疑问,就是为什么第三列不能kcalsskclass了,是否因为还需要存在一个kclass对象描述第二列,而之后的kclass对象就已经完全一样了,所以就抽象了

关于问题2,
本来是问关于第2列里面内容字段的,例子里不是说他们存放了一些静态变量,那么该静态变量是否存在类似1列的数据结构,但根据1的理解,kclass对象存放着其前级对象被GC所关心的东西,那么两者是否有关系,或者该属性为xxKlass的特殊定义,不同的类型有不同的定义,之后就没有了...









因为HotSpot 1.7之前,包括Class在内的元数据对象都需要被GC管理,因此这四列的对象其实都是oopDesc类型,只不过第一列是描述实例的instanceOopDes, 第二三四列为klassOopDesc;这个klassOopDesc可以看作是klass的一个wrapper,仅仅为了被gc更容易滴管理和表示,它的内部有一个klass成员来表达klass的信息。

所以第二列的 klassOopDesc 内部的klass 乃Integer类的klass,第三列的klass为 klassOopDesc这个对象的klass——instanceKlassKlass,那第三列这个类的klass是什么呢?由于描述instanceKlassKlass,methodKlassKlass,xxxxKlassKlass等一大票KlassKlass需要的元数据实际上是相同的,他们就是第四列的KlassKlass,第四列的KlassKlass的klass可以用它自己来描述,于是就圆满了。
30 楼 simonll 2017-03-17  
非常非常感谢~~
29 楼 RednaxelaFX 2013-10-12  
在世界的中心呼喚愛 写道
RednaxelaFX 写道
在世界的中心呼喚愛 写道
楼主,请问下虚拟机要怎么学习???比如业余时间怎么实践
有些理论、概念能理解,
很快就会忘记了,没发像楼主这样深入的研究。。

可能是没有实践的地方。。


实践最好的办法就是
1、自己写虚拟机实现
2、调试别人的虚拟机实现

别人?
是讨论组“欢迎来到高级语言虚拟机圈子”这个帖子里?

别人就是说现成的虚拟机咯。找个你喜欢的语言的虚拟机来玩玩。
那个帖子里确实是列了很多我知道的虚拟机,从里面挑一个来玩未尝不可
28 楼 在世界的中心呼喚愛 2013-10-12  
RednaxelaFX 写道
在世界的中心呼喚愛 写道
楼主,请问下虚拟机要怎么学习???比如业余时间怎么实践
有些理论、概念能理解,
很快就会忘记了,没发像楼主这样深入的研究。。

可能是没有实践的地方。。


实践最好的办法就是
1、自己写虚拟机实现
2、调试别人的虚拟机实现


别人?
是讨论组“欢迎来到高级语言虚拟机圈子”这个帖子里?
27 楼 RednaxelaFX 2013-10-12  
在世界的中心呼喚愛 写道
楼主,请问下虚拟机要怎么学习???比如业余时间怎么实践
有些理论、概念能理解,
很快就会忘记了,没发像楼主这样深入的研究。。

可能是没有实践的地方。。


实践最好的办法就是
1、自己写虚拟机实现
2、调试别人的虚拟机实现
26 楼 在世界的中心呼喚愛 2013-10-12  
楼主,请问下虚拟机要怎么学习???比如业余时间怎么实践
有些理论、概念能理解,
很快就会忘记了,没发像楼主这样深入的研究。。

可能是没有实践的地方。。

25 楼 Jefen 2013-09-16  
群主能帮我确认下我上面说的几个问题吗,不知是否描述清楚了?

发现自己是个别字先生,咳咳,有好些错别字....
24 楼 Jefen 2013-09-12  

RednaxelaFX 写道

.....
公司网络有文字限制,太多了,发不出去,能省则省....



感觉群主的解答...
首先我们把那四列表格定义为1,2,3,4

关于问题1,按照LZ的意思,我理解了下,然后按对照图例重新描述了下,不知是否正确?
第1列为Int对象,GC时可以统一处理,
第2列为第1列对象所对应的元数据,也是Int的kclass对象,里面存放着gc关心的一些信息,按照图的理解,不同的Int对象,其_klass字段都是对向第2列的,那么第二列存放在的应该是公共信息,是实例无关的,原先我以为他是一个int的类定义,但现在看来好像不是,
同时,由于他又是一个对象,所以该对象也是由gc直接管理的,因此他也会存在一个_klass字段直接该kclass对象的kclass对象,即第三列
第3列即前面所说的kclass对的kclass对象,里面存放kclass对象的一些gc相关信息
第4列为第3列所描述kclass对象的kclass对象,同时避免无限循环,定义了kclasskclass对象,用于描述其上一级及之后的kclass对象,该内容无类型的区别,类似于通用指针的抽象概念

这里有一个疑问,就是为什么第三列不能kcalsskclass了,是否因为还需要存在一个kclass对象描述第二列,而之后的kclass对象就已经完全一样了,所以就抽象了

关于问题2,
本来是问关于第2列里面内容字段的,例子里不是说他们存放了一些静态变量,那么该静态变量是否存在类似1列的数据结构,但根据1的理解,kclass对象存放着其前级对象被GC所关心的东西,那么两者是否有关系,或者该属性为xxKlass的特殊定义,不同的类型有不同的定义,之后就没有了...







23 楼 RednaxelaFX 2013-09-11  
Jefen 写道
在v0.5版第121页有个全局的地址映射表,里面提到_klass指向所属类的地址,有几个疑问不是很确认?
1.前面两个就链接关系来说还是可以理解,但后面instanceKlassKlass,klassKlass这两个是表示什么意思,他们存放的又是什么东西

HotSpot VM在JDK8之前的版本都是把Java对象和元数据对象以统一的方式由GC管理的。为了让GC能统一的处理这些对象,每个由GC管理的对象都继承自oopDesc,而每个oopDesc都有一个_klass字段指向描述它的Klass对象。GC在找到一个对象之后,要知道对象大小、对象里什么位置有GC需要知道的指针之类的信息,就会通过从_klass字段找到Klass对象,从Klass对象获取。更准确说Klass对象是嵌在klassOopDesc对象,以便Klass对象也同样得到GC的统一管理。
(在增加了压缩指针功能之后,_klass字段改名为_metadata字段,类型是klassOop(非压缩指针模式下)与narrowOop(压缩指针模式下)的union。本质作用并没有改变)。

每种oopDesc类型都有对应的Klass。例如说
instanceOopDesc就有instanceKlass,
typeArrayOopDesc就有typeArrayKlass。
前面说了,Klass对象被klassOopDesc包装着,它们自身也需要被Klass对象来描述,所以
instanceKlass就有instanceKlassKlass,
typeArrayKlass就有typeArrayKlassKlass。

但这样一直klassKlassKlass...下去就无止尽了。于是找到一个“不动点”,也就是klassKlass,用于描述自己以及所有xxxKlassKlass。这就是那张看起来很奇怪的图的含义。

这种设计其实是传承自Smalltalk的传统——Smalltalk里Class也是用户可操作的对象,也受自动内存管理(GC)的统一管理。

Jefen 写道
2.java.lang.Integer表示整型类的定,里面还存放着静态数据,那么还不存在静态的对类空间,指向java.lang.Integer,就像左边的instanceOopDesc对例?

抱歉我没看懂问题…
22 楼 Jefen 2013-09-11  
上传图片到相册,不知为什么没有任何提示,但就是空白的,不知是不是公司网络的问题,只能对着图片说了.....

在v0.5版第121页有个全局的地址映射表,里面提到_klass指向所属类的地址,有几个疑问不是很确认?
1.前面两个就链接关系来说还是可以理解,但后面instanceKlassKlass,klassKlass这两个是表示什么意思,他们存放的又是什么东西

2.java.lang.Integer表示整型类的定,里面还存放着静态数据,那么还不存在静态的对类空间,指向java.lang.Integer,就像左边的instanceOopDesc对例?


21 楼 RednaxelaFX 2012-02-16  
javawlb 写道
我利用了一个下午看完了。但是看的是云里雾里的,都不知道jvm还有这些东西,都不知道这些东西用来做什么,期待跟楼主学习一下,谢谢!!

多半是因为有很多东西“知道”了也没用吧…
20 楼 javawlb 2012-02-16  
我利用了一个下午看完了。但是看的是云里雾里的,都不知道jvm还有这些东西,都不知道这些东西用来做什么,期待跟楼主学习一下,谢谢!!
19 楼 RednaxelaFX 2012-02-08  
kongxz45 写道
BTW,楼主这个昵称中的Fx难道是韩国组合F(x)

不是…跟韩国恐怕扯不上关系
18 楼 kongxz45 2012-02-08  
补充一下,上面的留言粘错名字了,结尾有线像,嘿嘿,是和IcyFenix 的讨论,BTW,楼主这个昵称中的Fx难道是韩国组合F(x)
17 楼 kongxz45 2012-02-08  
看了你的帖子--Java与C/C++的性能对比。其中和RednaxelaFX的讨论比较精彩,也意识到原来自己之前都停留在肤浅的表层,做技术的人需要深入了,支持
16 楼 wodearong 2011-09-19  
非常支持技术分享!
15 楼 sigmad 2011-05-30  
收了,多谢
14 楼 lemonweirui 2011-05-21  
视频下来看了,摄像同学不给啊。总是盯着某个看不到投影和黑板的角落
13 楼 yeshaoting 2011-03-04  
一定好好看看.
12 楼 王者之剑 2011-02-19  
学习

相关推荐

Global site tag (gtag.js) - Google Analytics