`
RednaxelaFX
  • 浏览: 3052557 次
  • 性别: 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  
学习

相关推荐

    深入java虚拟机——applet 演示

    本主题将深入探讨Java虚拟机与Applet之间的关系以及如何进行Applet的演示。 首先,我们需要理解Java虚拟机的工作原理。JVM是一种抽象的计算设备,它执行字节码(.class文件),这是Java源代码经过编译后的中间表示...

    深入JAVA虚拟机第二版+随书代码

    《深入JAVA虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心技术的机会。这本书结合了理论与实践,不仅讲解了JVM的内部机制,还...

    深入理解Java虚拟机JVM高级特性与最佳实践1

    然而,想要在高并发和高性能场景中充分发挥Java的优势,开发者需要对支撑Java程序运行的虚拟机——Java虚拟机(JVM)有深入的理解。《深入理解Java虚拟机JVM高级特性与最佳实践》一书,正是为解决这一需求而生。 ...

    java虚拟机书籍

    而Java虚拟机(JVM)作为运行Java程序不可或缺的一环,其重要性不言而喻。Java虚拟机不仅负责解释和执行Java字节码,还提供了垃圾回收、内存管理等一系列底层功能,让Java开发者能够专注于业务逻辑的实现,而无需...

    java虚拟机源码-jvm-demo-code:深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)源代码

    《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》是一本深受Java开发者喜爱的经典著作,它详细解析了Java虚拟机的工作原理和优化策略。源代码"jvm-demo-code-master"是该书配套的示例代码,包含了许多关于...

    虚拟机技术简单描述,Java虚拟机

    【Java虚拟机】(JVM)是虚拟机的一种,它是专门为了执行Java字节码而设计的。JVM作为Java编程语言的运行平台,负责解析并执行Java程序的类文件,提供了跨平台的能力,使得Java程序能在任何支持JVM的设备上运行。 ...

    java虚拟机性能监控

    ### Java虚拟机性能监控 #### 一、引言 在当今快速发展的信息技术领域,Java作为最流行的编程语言之一,其虚拟机(Java Virtual Machine, JVM)的性能优化和监控成为了确保应用程序高效稳定运行的关键因素。Java...

    实战Java虚拟机——JVM故障诊断与性能优化

    包括但不限于体系结构、虚拟机的调试方式、常用参数、垃圾回收系统、Class文件结构、执行系统等,力求从多角度更专业地对Java虚拟机进行探讨。  4. 通俗易懂。简单的白话文风格贯穿全书,尽量做到读者在阅读过程中...

    进程调度算法模拟器(java语言)(操作系统课程设计)(一看即懂)(基于MVC模式的Swing界面简单演示)

    进程调度算法模拟器,模拟了3种调度算法 ...(请确保你的电脑装有java虚拟机5.0以上) -------------------------------------- 对线程编程与MVC模式感兴趣的同学可以看看,也可以用于操作系统课程设计.

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字) Java序列化和反序列化是Java虚拟机中的一种重要机制,它们可以将Java对象转换为二进制数据,然后...

    解析Java虚拟机器开发:权衡优化、高效和安全的最优方案.pdf

    #### Java虚拟机(JVM)概览 Java虚拟机(JVM)是一种能够执行编译后的Java字节码的虚拟机环境。它提供了运行Java应用程序所需的基础平台,并且在设计上考虑到了跨平台兼容性、性能优化以及安全性等多方面的需求。 #...

    Java虚拟机类装载的原理及实现

    ### Java虚拟机类装载的原理及实现 #### 引言 Java虚拟机(JVM)作为执行Java程序的核心,承担着解释执行字节码的重要任务。在这个过程中,类的装载是一个关键步骤,它确保了Java程序能够正确无误地运行。类装载...

    java 堆栈的演示程序

    Java堆栈是一个重要的内存区域,它是Java虚拟机(JVM)的一部分,主要负责管理方法的执行。在这个"java 堆栈的演示程序"中,我们可能会深入理解堆栈的工作原理以及它在运行jsp程序时的角色。源代码设计将帮助我们...

    java虚拟机源码-JVMInPractice:实战JAVA虚拟机.JVM故障诊断与性能优化.葛一鸣.2015源代码

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。在"JVMInPractice:实战JAVA虚拟机.JVM故障诊断与性能优化.葛一鸣.2015源代码"这个资源中,葛一鸣专家分享了关于JVM的实际...

    JAVA--Beginners-to-see.zip_beginners

    首先,Java语言的核心概念是“Write Once, Run Anywhere”(一次编写,到处运行),这得益于其跨平台的JVM(Java虚拟机)。学习Java,你需要了解JDK(Java Development Kit)——这是编写、编译和运行Java程序的必备...

    ibm_java1.6.0

    它提供了Java虚拟机(JVM)、核心类库和其他必要的运行时组件。 2. **IBM Java演示包** - `java-1.6.0-ibm-demo-1.6.0.16.30-1jpp.i386.rpm` 这个包包含了示例程序和演示应用,用户可以通过它们了解IBM Java的功能...

    Java 语言基础知识教程 PPT演示文稿

    - **平台无关性**:Java的“一次编写,到处运行”特性,得益于Java字节码和Java虚拟机(JVM)。 - **多线程**:Java支持多线程编程,可以同时执行多个任务。 - **动态内存分配**:Java自动管理内存,程序员无需...

    探索Java虚拟机的心脏:字节码执行全解析

    ### 探索Java虚拟机的心脏:字节码执行全解析 #### Java语言概览 Java自1995年由Sun Microsystems(现归Oracle所有)发布以来,已成为全球范围内广泛应用的编程语言。作为一种面向对象的语言,Java将现实世界中的...

    vsphere-automation-sdk-java:使用VMware REST API的vSphere,VMC和NSX-T的Java示例,语言绑定和API参考文档

    适用于Java的VMware vSphere Automation SDK目录抽象本文档介绍了使用vSphere Automation Java客户端库的vSphere Automation Java SDK示例。 此外,一些示例还演示了vSphere Automation和vSphere Web Service API的...

Global site tag (gtag.js) - Google Analytics