《深入理解Java虚拟机:JVM高级特性与最佳实践》学习笔记 Ⅲ 虚拟机执行子系统

第三部分 虚拟机执行子系统
第6章 类文件结构
//实现语言无关性的基础仍然是虚拟机和字节码存储格式,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合Class文件应有的结构就可以在Java虚拟机中运行。
1.Class类文件的结构
Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件之中,中间没有分隔符。
Class文件格式采用一种类似于C语言结构体的伪结构来存储,只有两种数据类型:无符号数和表。
每个Class文件的头4个字节成为魔数,唯一作用是用于确定这个文件是否为一个能被虚拟机接受的Class文件。
主次版本号之后的是常量池入口,常量池是Class文件结构中与其他项目关联最多的数据类型。主要存放两大类常量,即字面量(Literal)和符号引用(Symbolic References)。

第7章 虚拟机类加载机制
//代码编译的结果是从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。
在Class文件中描述的各种信息,被加载到虚拟机中之后才能被运行和使用。而虚拟机是如何加载class文件,class文件中的信息进入到虚拟机后会发生什么变化?
虚拟机读取class文件,把描述类的数据从class文件加载到内存中,并对数据进行校验,转换解析和初始化,然后形成可以被虚拟机直接使用操作的Java类型,即虚拟机的类加载机制。
//Java中天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。
1.类加载的时机
类从被加载到虚拟机内存中开始,到卸载出内存为止。整个生命周期包括七个阶段。
加载、验证、准备、解析、初始化、使用和卸载七个阶段。
验证、准备和解析统称为连接(Linking)。
2.类加载的过程
2.1 加载阶段
加载阶段,特别是加载时获取类的二进制字节流的动作,是开发期可控性最强的阶段,因为既可以使用系统的类加载器,也可以自定义类加载器实现,并且通过自定义类加载器控制字节流的获取方式。
2.2 验证阶段
确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
2.3 准备阶段
正式为类变量分配内存并设置类变量初始值,这些内存都将在方法区中进行分配。
2.4 解析阶段
虚拟机将常量池内的符号引用替换为直接引用的过程。
2.5 初始化阶段
初始化阶段,才真正开始执行类中定义的Java程序代码,即字节码。
3.类加载器
//类加载阶段的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作被放到虚拟机外部实现,
//即应用程序自己控制获取,实现这个动作的代码模块被称为"类加载器"。
类加载器在类层次划分,OSGi,热部署,代码加密等领域都应用到。
3.1 类与类加载器
3.2 双亲委派模型
从虚拟机的角度,存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类使用C++语言实现,是虚拟机自身的一部分,另一种是所有其他的类加载器,全部继承自抽象类java.lang.ClassLoader。
双亲委派模型的工作过程,即一个类加载器收到类加载的请求,首先会委派给父类加载器去完成,所有的加载请求都传送到顶层的启动类加载器,如果父类加载器反馈无法完成加载请求,会继续交由子类加载。
这样加载的好处是Java类随着它的类加载器拥有了带优先级的层次关系,避免了出现一个类加载多次。

第8章 虚拟机字节码执行引擎

1.运行时栈帧结构
2.方法调用
3.基于栈的字节码解释执行引擎

第9章 类加载及执行子系统的案例与实战

//在Class文件格式与执行引擎这部分里,主要是由虚拟机直接控制的行为,能通过程序进行操作的,主要是字节码生成与类加载器这两部分。
1.案例分析
Tomcat:正统的类加载器结构
主流的Java Web服务器,如Tomcat、Weblogic等都实现了自己定义的类加载器。
一个功能完备的Web服务器,要解决下面的问题:
部署在同一个服务器上的多个Web应用程序使用的Java类库既可以实现相互隔离,又可以互相共享。

时间: 2024-08-08 22:05:37

《深入理解Java虚拟机:JVM高级特性与最佳实践》学习笔记 Ⅲ 虚拟机执行子系统的相关文章

挑战高薪必看:《深入理解java虚拟机 jvm高级特性与最佳实践》

Java是目前用户最多.使用范围最广的软件开发技术之一.Java 的技术体系主要由支撑 Java程序运行的虚拟机.提供各开发领域接口支持的Java API.Java 编程语言及许多第三方 Java框架(如Spring.Struts 等)构成.在国内,有关Java API.Java语言语法及第三方框 架的技术资料和书籍非常丰富,相比之下,有关Java虚拟机的资料却显得异常贫乏. 资料获取方法 内容特色 第一部分走近 Java 本书的第部分为后文的讲解建立了良好的基础.尽管了解Java技术的来龙去脉

深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)PDF下载

网盘下载地址:深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)PDF下载 – 易分享电子书PDF资源网 作者: 周志明 出版社: 机械工业出版社 副标题: JVM高级特性与最佳实践 出版年: 2013-9-1 页数: 433 定价: 79.00元 装帧: 平装 内容简介 · · · · · · <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)>内容简介:第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公

深入理解Java虚拟机:JVM高级特性与最佳实践(一):java 内存区域与内存异常

如需转载,请标明转自何处 运行时数据区域: java 虚拟机在执行java程序的过程中会把他管理的内存化为若干个不同的数据区域.这些区域都有各自的用途,销毁与创建的时间,有的区域随着进程的启动而存在,有的则依赖用户的线程的启动和结束而创建和销毁,java虚拟机管理的内存分为一下几个数据区域: 1.程序计数器:当前线程所执行的字节码的行号指示器,通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理线程恢复都依赖与它. java 虚拟机的多线程是通过线程的轮流切换并分配

《深入理解Java虚拟机:JVM高级特性与最佳实践》读书笔记

第一部分 走进Java 一.走进Java 1.概述 java广泛应用于嵌入式系统.移动终端.企业服务器.大型机等各种场合,摆脱了硬件平台的束缚,实现了"一次编写,到处运行"的理想 2.java技术体系结构 按照功能来划分 包括以下几个组成部分:Java程序设计语言,各种硬件平台的java虚拟机,Java API类库,来自商业机构和开源社区的第三方Java类库,Class文件格式 Java程序设计语言,java虚拟机,Java API类库统称为JDK,是用于支持java程序开发的最小环境

《深入理解Java虚拟机 JVM高级特性...》核心笔记

深入理解Java虚拟机 JVM高级特性与最佳实践(第二版) 核心笔记 JAVA 环境: JAVA虚拟机高级特性: 一:java内存区域与内存异常 一):运行数据区     1:程序计数器(Program Counter Register),也称"PC寄存器" A:用来指示需要执行哪条指令的.(在汇编语言中,CPU在得到指令之后,程序计数器便自动加1或者根据                    转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令.) B:由于在JVM中,多线程

《深入理解Java虚拟机:JVM高级属性与最佳实践》读书笔记(更新中)

第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 OpenJDK 中所带的虚拟机,最初并不是Sun开发 Sun Mobile- Embedded VM/ Meta- Circular VM BEA JRockit/ IBM J9 VM JRockit曾号称世界上最快的java虚拟机,BEA公司发布.J9属于IBM主要扶持的虚拟机 Azul VM/ BEA

深入java虚拟机-jvm高级特性和实战

第一部分 走近java 第一章 java技术体系 官方所定义的java技术体系 java程序设计语言 各硬件平台上的java虚拟机 Class文件格式 java api类库 来自商业机构和开源社区的第三方java类库 我们可以把java程序设计语言.java虚拟机.java api类库这三部分统称为JDK,是用于支持java程序开发的 最小环境把java api类库总的javaSE api子集和java虚拟机统称为JRE,是支持java程序运行的标准环境. 第二部分 自动内存管理机制 第二章 内

JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收

关于垃圾回收器GC(Garbage Collection),多数人意味它是Java语言的伴生产物.事实上,GC的历史远比Java悠远,于1960年诞生在MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言.当Lisp尚在胚胎时期,开发人员就在思考GC需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 目前GC早已解决了以上问题,内存的动态分配与内存回收机制已经相当成熟,一切似乎“自动化”起来.而开发人员仍旧需要了解GC和内存分配等底层知识,因为在排查各种内存溢出.内

python高级编程之最佳实践,描述符与属性01

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #最佳实践 """ 为了避免前面所有的问题,必须考虑到几下几点: ~1:应该避免多重继承,可以一些设计模式来代替它 ~2:super使用必须一致,在类层次结构中,应该在所有地方都使用super或者彻底不使用它,滥用super和传统调用是一种滥用方法,建议使用super ~3:不要滥用经典类和新式类,两者都具备代码库将导致不同的mro表现 ~4:调