当前位置:首页 > 虚拟机 > 正文

深入理解java虚拟机周志明(深入理解java虚拟机)

《自己动手写Java虚拟机豆瓣》pdf在线阅读全文,求百度网盘云资源

《打造你自己的Java虚拟机豆瓣》百度网盘pdf最新:
链接:

jvm加载类的过程的问题?

一个类从加载到虚拟机到卸载的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备和解析部分称为耦合。
加载:
在加载阶段,虚拟机主要完成三件事:
1.通过类的全限定名获取定义该类的二进制字节流。
2.将这个字节流表示的静态存储结构转换为区的运行时数据结构。
3.生成一个对象,表示Java堆中的此类,作为区数据的访问输入。
验证:
验证阶段的目的是确保class文件字节流中的信息符合JVM规范,不会损害JVM。如果验证失败,会抛出Error异常或其子类异常。验证过程分为四个阶段:
1.文件格式验证:验证字节流文件是否符合Class文件格式规范,能否被当前虚拟机正确处理。
2.元数据验证:对字节码描述的信息进行语义分析,确保描述的信息符合Java语言的规范。
3.字节码验证:主要分析数据流和控制流,保证被验证类的在运行过程中不会对虚拟机造成损害。
4.符号引用验证:当虚拟机将符号引用转换为直接引用时,就会发生符号引用验证。此转换作将在分析阶段进行。
准备:
准备阶段为变量分配内存并设置类变量的初始化。在此阶段,仅对类的变量(静态修改变量)进行赋值,而不对类的实例变量进行赋值。对于不再是final的变量,JVM会将其设置为“空值”,而不是赋值语句的值:
pirvatestaticintsize=12;
所以在这个阶段size值为0,并且不是12.被final修饰的类变量将被赋予实数值。
解析:
解析的过程就是将常量池中的符号引用替换为直接引用。主要包括四类参考文献的分析。类或接口解析、字段解析、解析、接口解析。
初始化:
在准备阶段,类变量已经初始化过一次。在此阶段,类的变量和其他资源根据程序员在整个程序中制定的计划进行初始化。这些资源包括static{}块、构造函数、父类的初始化等。
至于使用和卸载阶段,这里就不做过多解释了。应用程序进程按照程序定义的行为执行,卸载则由GC完成。
参考资料:
《深入Java虚拟机》周志明
《深入JA虚拟机第二版》BillVenners

揭秘Java虚拟机:JVM设计原理与实现详细资料大全

《揭秘Java虚拟机:JVM设计原理与实现》是电子工业出版社2017年出版的一本书,作者是冯亚飞。基本介绍书名:揭秘Java虚拟机:JVM设计原理与实现作者:冯亚飞BN:9787121315411页数:700出版时间:2017-06格式:1.6万字字数:942内容简介、目录、目录内容,目录。《揭秘Java虚拟机:JVM设计原理与实现》从源码角度讲解了HotSpot的内部实现机制。本书主要包含三个部分——JVM数据结构设计与实现、执行引擎机制和内存分配模型。数据结构部分包括Java字节码文件格式、常量池分析、字段分析和分析,每个部分都提供了详细的源码实现分析,例如字段分析章节就提供了Java字段重组、字段等关键机制的详细分析从源码层面继承,再比如分析章节,提供了Java多态函数在源码层面的实现,《揭秘Java虚拟机:JVM设计原理与实现》从根本上梳理和明确了关键概念通过直接分析源码了解Java领域的机制,执行引擎部分包括Java调用机制、栈帧创建机制、指令集架构、解释器实现机制。本专题是《揭秘Java虚拟机:JVM设计原理与实现》中技术含量较高的部分,要求读者有一定的编译背景。但不要被“”这个词吓到。事实上,在作者看来,与高级语言相比,汇编的语法非常简单,语义也非常清晰。执行引擎部分重点关注Java源代码如何转换为字节码,以及如何将字节码转换为机器指令以便被物理CPU执行的技术实现。同时详细分析了创建Java函数栈的整个过程。在源码分析的过程中,让读者了解什么是Java函数栈和栈帧,以及栈内部的详细结构。框架。内存分配部分主要包括类型创建和加载、对象实例创建和内存分配,比如new关键字的工作机制、import关键字的作用、ass(的本地实现机制))界面。。《揭秘Java虚拟机:JVM设计原理与实现》不仅分析了源码实现,在描述HotSpot内部实现机制的同时,也分析了HotSpot如此实现的技术必然性。在阅读《揭秘Java虚拟机:JVM设计原理与实现》的过程中,读者会在很多地方看到作者自己的思考。目录章Java虚拟机概述11.1从机器语言到Java-HelloJames11.2兼容选择:生产力的61.3中间语言翻译101.3.1从中间语言到机器代码的翻译111.3.2通过C程序翻译111.3。3直接翻译为机器码131.3.4本地编译161.4魔术指令181.4.1常用汇编指令201.4.2JVM指令211.5本章小结24第二章Java执行引擎工作原理:调用252.1调用262.1.1真机调用262.1.2C语言函数调用412.2JVM函数调用机制472.3函数指532.4CallStub函数指定义602.5_call_stub_entry例程722.6本章小结115第3章Java数据结构和面向对象1173Java算法138的数据结构来自Java算法13。数据类型1223.3Java数据结构的就绪性1293.4Java类型识别1323.4.1类字节码概述1333.4.2JVM中的幻数和int类型1363.4.3常量池和JVM内部对象模型1373Bigendian和Littleendian5ian。1433.5.1大端和小端的概念1463.5.2大端和大端的本质原因1483.5.3大端和小端验证1493.5.4大端和小端场景1513.5.5如何解决字节序反转1543.56避免大小端问题1563.5.7JVM对字节码文件的大小端处理1563.6本章小结159第4章Java字节码实践1614.1字节码格式初步探索11614个测试用例。1624.1.2使用javap命令解析字节码文件1624.1.3显示字节码二进制1654.2幻数和版本1664.2.1幻数1684.2.2版本号1684.3常量池1694.3.11常量池的基本结构316定义。JVM常量的个数1704.3.3常量池元素的复合结构1704.3.4常量池的最终位置1724.3.5常量池元素总数1724.3.6个常量池元素1734.3.7第二个常量池元素1744.3。8超类常量1744.3.9变量常量池元素1754.4访问标志和继承信息1774.4.1aess_flags1774.4.2this_class1784.4.3super_class1794.4.4interface1794.04_field.4fields.51fields.51fields.51fields。fields_count]1814.6信息1854.6.1mods_count1854。6.2mod_infomods[mods_count]1854.7本章回顾205第5章常量池分析2065.1常量池内存分配2085.1.1常量池内存分配总体链接2095.1.2内存分配2155.1.3模型2155.1.2初始化2155.1.两个模型三个维度2255.2.2概述2275.2.3oop2295.2.4class2315.2.5handle2345.2.6oop、class、handle的相互重构2395.3常量池类模型(一)2445.3.1class2构造总连接2class2is类3构造总计4类2类2适用于内存2495.3.3classOop内存删除2535.3.4初始化mark2535.3.5初始化classOop._metadata2585.3.6初始化class2595.3.7自引用2605.4常量