深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
- 格式:pptx
- 大小:3.13 MB
- 文档页数:98
第1章走近Java1.2 Java技术体系1.Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK(JavaDevelopment Kit),JDK是用于支持Java程序开发的最小环境。
1.4 Java虚拟机发展史1.4.1 Sun Classic / Exact VM1.Exact VM因它使用准确式内存管理而得名,即虚拟机可以知道内存中某个位置的数据具体是什么类型。
譬如内存中有一个32位的整数123456,它到底是一个reference类型指向123456的内存地址还是一个数值为123456的整数,虚拟机将有能力分辨出来,这样才能在GC的时候准确判断堆上的数据是否还可能被使用。
由于使用了准确式内存管理,Exact VM可以抛弃以前Classic VM基于handler的对象查找方式,这样每次定位对象都烧了一次间接查找的开销,提升执行性能。
1.4.2 Sun HotSpot VM1.HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。
如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。
1.4.6 Apache Harmony / Google Android Dalvik VM1.Dalvik VM并不是一个Java虚拟机,它没有遵循Java虚拟机规范,不能直接执行Java的Class文件,使用的是寄存器架构而不是JVM中常见的栈架构。
但是它与Java又有着千丝万缕的联系,它执行的dex(Dalvik Executable)文件可以通过Class文件转化而来,使用Java语法编写应用程序,可以直接使用大部分的Java API 等。
1.5 展望Java技术的未来1.函数式编程的一个重要优点就是这样的程序天然地适合并行运行。
第2章Java内存区域与内存溢出异常2.2 运行时数据区域2.2.4 Java堆1.此内存区域(Java堆)的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
第1章Java开发入门一、1.对象2.面向对象、跨平台性3.javac4.Java虚拟机(或JVM)5.JRE二、1.错2.错3.错4.对5.对三、1.C2.ABCD3.D4.ABCD5.D四、1.简答性、面向对象、安全性、跨平台性、支持多线程、分布性。
2. Java程序运行时,必须经过编译和运行两个步骤。
首先将后缀名为.java的源文件进行编译,生成后缀名为.class的字节码文件,然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来。
五、HelloWorld.java1 public class HelloWorld {2 public static void main(String[] args) {3 System.out.println("这是第一个Java程序!");4 }5 }第2章Java编程基础一、1.class2.单行注释、多行注释、文档注释3.44.==5.容器、0二、1.对2.错3.对4.错5.对三、1.AC2.A3.BD4.C5.C四、1.Java语言的八种基本数据类型有:byte字节型,占一个字节。
short短整型,占两个字节。
int整型,占4个字节。
long长整型,占8个字节。
float单精度浮点型,占4个字节。
double 双精度浮点型,占8个字节。
char字符型,占两个字节。
boolean型,表示逻辑值,有true 和false两个值,分别占一个字节。
2. 在switch条件语句和循环语句中都可以使用break语句。
当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
当它出现在循环语句中,作用是跳出循环语句,执行循环后面的代码;continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
五、1.1public class getSum {2public static void main(String[] args) {3int sum = 0;4for (int i = 1; i < 100; i++) {5if (i % 2 != 0)6sum += i;7}8System.out.println(sum);9}10}2.1public class Test {2 public static void main(String[] args) {3 int i = 1;4 long sum = 1;5 do {6 sum *= i;7 i++;8 } while (i <= 5);9 System.out.println(sum);10 }11}第3章面向对象(上)一、1.封装、继承、多态2.private、default、protected、public3.static4.private5.参数类型参数个数6.this二、1.对2.对3.错4.对5.对三、1.C2.B3.D4.B5.C四、1.面向对象的特点主要可以概括为封装性、继承性和多态性。
第1篇一、基础知识1. Java简介题目:请简述Java的基本特点。
答案:- 简单易学:Java设计之初就考虑了易学性,使用面向对象编程。
- 原生跨平台:Java通过JVM(Java虚拟机)实现跨平台运行。
- 安全性:Java提供了强大的安全机制,如沙箱安全模型。
- 体系结构中立:Java不依赖于特定的硬件或操作系统。
- 高效:Java的运行速度接近C/C++。
- 多线程:Java内置多线程支持,便于实现并发处理。
- 动态性:Java在运行时可以进行扩展和修改。
2. Java虚拟机题目:请解释Java虚拟机(JVM)的作用。
答案:JVM是Java程序的运行环境,其主要作用包括:- 将Java字节码转换为本地机器码。
- 管理内存,包括堆、栈、方法区等。
- 提供垃圾回收机制。
- 管理线程和同步。
3. Java内存模型题目:请简述Java内存模型的组成。
答案:Java内存模型主要由以下部分组成:- 堆(Heap):存储对象实例和数组。
- 栈(Stack):存储局部变量和方法调用。
- 方法区(Method Area):存储类信息、常量、静态变量等。
- 本地方法栈(Native Method Stack):存储本地方法调用的相关数据。
- 程序计数器(Program Counter Register):存储线程的当前指令地址。
4. Java关键字题目:请列举并解释Java中的几个关键字。
答案:- `public`:表示访问权限为公开。
- `private`:表示访问权限为私有。
- `protected`:表示访问权限为受保护。
- `static`:表示属于类本身,而非对象实例。
- `final`:表示常量或方法不能被修改。
- `synchronized`:表示线程同步。
- `transient`:表示数据在序列化时不会被持久化。
二、面向对象编程5. 类和对象题目:请解释类和对象之间的关系。
答案:类是对象的模板,对象是类的实例。
程序员职业规划(⼀篇来⾃阿⾥Java⼯程师对⼯作3年左右程序员的职业建议和应该掌握的职业技能)程序员的三个阶段(转载)第⼀阶段:三年我认为三年对于程序员来说是第⼀个门槛,这个阶段将会淘汰掉⼀批不适合写代码的⼈。
这⼀阶段,我们⾛出校园,迈⼊社会,成为⼀名程序员,正式从书本上的内容迈向真正的企业级开发。
我们知道如何团队协作、如何使⽤项⽬管理⼯具、项⽬版本如何控制、我们写的代码如何测试如何在线上运⾏等等,积累了⼀定的开发经验,也对代码有了⼀定深⼊的认识,是⼀个⽐较纯粹的Coder的阶段。
第⼆阶段:五年五年⼜是区分程序员的第⼆个门槛。
有些⼈在三年⾥,除了完成⼯作,在空余时间基本不会研究别的东西,热衷于研究各种技术实现细节、看了N多好书、写⼀些博客、在Github上分享技术。
这些⼈在五年后必然具备在技术上独当⼀⾯的能⼒并且清楚⾃⼰未来的发展⽅向,从⼀个Coder逐步⾛向系统分析师或是架构师,成为项⽬组中不可或缺的⼈物。
第三阶段:⼗年⼗年⼜是另⼀个门槛了,转⾏或是继续做⼀名程序员就在这个节点上。
如果在前⼏年就抱定不转⾏的思路并且为之努⼒的话,那么在⼗年的这个节点上,有些⼈必然成长为⼀名对⾏业有着深⼊认识、对技术有着深⼊认识、能从零开始对⼀个产品进⾏分析的程序员。
这样的⼈在公司基本担任的都是CTO、技术专家、⾸席架构师等最关键的职位,这对于⾃⼰绝对是⼀件荣耀的事,当然⽼板在经济上也绝不会亏待你。
总结⼀下,随着⼯作年限的增长、对⽣活对⽣命认识的深⼊,应当不断思考三个问题: 我到底适不适合当⼀名程序员? 我到底应不应该⼀辈⼦以程序员为职业? 我对编程到底持有的是⼀种什么样的态度 是够⽤就好呢还是不断研究?最终,明确⾃⼰的职业规划,对⾃⼰的规划负责并为之努⼒。
关于专业技能⼀名3年⼯作经验的Java程序员应该具备的什么技能呢?阿⾥Java⼯程师给我们讲了他的经验。
⼤雄带⼩伙伴们⼀起了解⼀下。
这⾥要说明⼀下,以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得到的评价、拿到的薪⽔势必也越⾼。
深入理解java虚拟机(一)虚拟机内存划分Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区。
这些区域有不同的特性,起不同的作用。
它们有各自的创建时间,销毁时间。
有的区域随着进程的启动而创建,随着进程结束而销毁,有的则始终贯穿虚拟机整个生命周期。
Java虚拟机运行时内存区域主要分为七部分,分别是:程序计数器,Java虚拟机栈,本地方法栈,方法区,Java堆,运行时常量池,直接内存。
如上图所示(图片来源于网络):蓝色区域包裹的部分为运行时几个数据区域:白色的部分为线程私有的,既随着线程的启动而创建。
每个线程都拥有各自的一份内存区域。
它们是:JAVA栈(JAVA STACK),本地方法栈(NATIVE METHOD STACK),和程序计数器(PROGRAM COUNTER REGISTER)。
黄色部分是线程共享的,所有的线程共享该区域的内容。
他们是:方法区(METHOD AREA),堆(HEAP)。
我们分别来介绍这些区域。
(1)程序计数器(program counter register)学过计算机组成原理的都知道计算机处理器中的程序计数器。
当处理器执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。
与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。
此后经过分析指令,执行指令。
完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。
处理器的程序计数器是指寄存器,而java程序计数器是指一小块内存空间。
java代码编译字节码之后,虚拟机会一行一行的解释字节码,并翻印成本地代码。
这个程序计数器盛放的就是当前线程所执行字节码的行号的指示器。
在虚拟机概念模型中,字节码解释器工作室就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理等都依赖于它。
Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的,因此为了线程切换后还能恢复执行位置,每条线程都需要一个独立的程序计数器。
1、深入理解Java虚拟机:JVM高级特性与最佳实践如果你不满足于做一个只会写if…else…的Java程序员,而是希望更进一步,我随便举几个例子吧:1. 了解Java代码的底层运行机制2. 定位性能问题3. 对整个系统进行性能调优4. 解决各种奇奇怪怪的线上线下问题5. 更加高级别的,为自己的项目量身定做一款适合自己项目的虚拟机那么Java虚拟机是你必学的一门技术。
《深入理解Java虚拟机:JVM高级特性与最佳实践》作者是周志明,这本书可以说是国内写得最好的有关Java虚拟机的书籍,近半年,前前后后这本书我起码看了有5遍。
国内写虚拟机的书除了这本,其实还有一些其他的,我也买过,不过粗略看下来,很多内容也是《深入理解Java虚拟机:JVM高级特性与最佳实践》此书里面的。
另外值得一提的是,《深入理解Java虚拟机:JVM高级特性与最佳实践》这本书,有电子版的,网上搜一下就能下载到了。
不过建议有兴趣的朋友还是去买书看,电子版本下载到的一般是比较老的版本,相比最新修订版的《深入理解Jav a虚拟机:JVM高级特性与最佳实践》,有很多作者新补充的知识点是没有的。
2、HotSpot实战所有的Java虚拟机都是遵循着Java虚拟机规范来的,市面上的Java虚拟机几十款,《深入理解Java虚拟机:JVM高级特性与最佳实践》一书里面讲的虚拟机并不针对某种特定的虚拟机,而是从Java虚拟机规范的角度来讲解Java虚拟机。
我们平时使用的乃至商用的大多数Java虚拟机都是Sun公司的HotSpot,大家cmd进入命令行,使用”java -version”命令就可以看到了。
如果希望在Java虚拟机规范的基础上更加深入地去理解虚拟机的一些细节是怎么实现的,就可以看一下《HotSpot实战》一书,作者是陈涛。
不过由于HotSpot的源码都是C/C++写的,所以要求读者有非常好的C/C++基础,如果对这两门语言不是很熟悉的朋友,看这本书可能对你帮助不是很大。
第1篇一、Java基础知识1. 请简述Java的基本特点。
解析:Java具有“一次编写,到处运行”的特点,具有跨平台性;具有简单易学、面向对象、分布式、解释型、健壮性、安全性、体系结构中立、多线程、动态性等特点。
2. 什么是JVM?请简述JVM的作用。
解析:JVM(Java虚拟机)是运行所有Java应用程序的虚拟机。
它的作用是执行Java字节码,为Java程序提供运行环境,保证Java程序跨平台运行。
3. 请简述Java中的四种访问控制符及其作用。
解析:- public:表示公开的访问控制符,可以在任何地方访问。
- private:表示私有的访问控制符,只能在类内部访问。
- protected:表示受保护的访问控制符,可以在类内部和子类中访问。
- default(无修饰符):表示默认的访问控制符,只能在本包内访问。
4. 什么是封装?请举例说明。
解析:封装是将类的属性和行为封装在一起,对外只提供有限的接口。
例如,一个学生类,包含姓名、年龄、性别等属性,以及学习、休息等方法。
5. 什么是继承?请举例说明。
解析:继承是子类继承父类的方法和属性。
例如,一个动物类,包含行走、吃食等方法,一个猫类继承自动物类,则猫类具有行走、吃食等方法。
6. 什么是多态?请举例说明。
解析:多态是指同一个方法在不同对象上有不同的行为。
例如,一个形状类,包含计算面积的方法,一个圆形和正方形类继承自形状类,计算面积的方法在圆形和正方形类中有不同的实现。
7. 什么是接口?请举例说明。
解析:接口是一种规范,定义了类应该具有的方法,但不提供具体实现。
例如,一个Comparable接口,定义了compareTo方法,用于比较两个对象的大小。
8. 什么是泛型?请举例说明。
解析:泛型是一种类型参数化技术,可以在编译时进行类型检查,提高代码的安全性。
例如,一个List<T>泛型集合,可以存储任意类型的元素。
二、Java集合框架1. 请简述Java集合框架中的常用类及其特点。
计算机专业必读书籍计算机专业要读哪些书籍呢?下面是店铺精心为您整理的计算机专业必读书籍,希望您喜欢!一些经典的计算机书籍算法导论(第2版)代码大全(第2版)C++ Primer中文版(第4版)设计模式:可复用面向对象软件的基础浪潮之巅Java编程思想(第4版)Java核心技术卷1:基础知识Java核心技术卷2:高级特性人月神话Linux内核编程C程序设计语言(第2版新版)黑客与画家:硅谷创业之父Paul Graham文集编程之美:微软技术面试心得代码之美软件随想录:程序员部落酋长Joel谈软件架构之美国外计算机科学经典教材:Unix & Linux大学教程深入理解计算机系统(原书第2版)UNIX网络编程卷1:套接字联网APIUNIX网络编程卷2:进程间通信自动机理论、语言和计算导论软件架构的艺术Effective C++中文版Effective Java中文版(第2版)PHP & MySQL Web数据库应用开发指南(第2版)PHP经典实例(第2版)C++ 编程思想第1卷C++ 编程思想第2卷两卷合订本Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理数据库系统导论(原书第8版)Python参考手册(第4版)Python灰帽子提高C++性能的编程技术从网管员到CTO:网络设备配置与管理实战详解深入理解计算机系统(修订版)UNIX编程艺术深入理解Java虚拟机:JVM高级特性与最佳实践框架程序设计代码整洁之道编程珠玑(第2版)、编程珠玑(续)大话设计模式C#开发宝典深入理解Linux内核(第3版)UNIX环境高级编程 (第2版)WCF服务编程:.NET开发者决战SOA的制胜利剑(第3版)现代编译原理:C语言描述 (虎书)高级编译器设计与实现 (鲸书)编译原理(第2版)(龙书)Windows核心编程 (第5版)C++标准程序库:自修教程与参考手册设计原本:计算机科学巨匠Frederick P.Brooks的思考软件框架设计的艺术计算机专业人士必读好书(30本经典)1. 《代码大全》史蒂夫·迈克康奈尔推荐数:1684“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。
JVM,Java虚拟机基础知识新⼿⼊门教程(超级通熟易懂)⼀.写在前⾯ ⾸先,本篇⽂章并没有涉及原理,⽽是在笔者撸了《深⼊理解Java虚拟机》好⼏遍的基础上讲解⾃⼰的经验,从⼀个新⼿到现在明⽩JVM是个什么玩意,怎么去理解和明⽩,讲解这样⼀个经验⽽已。
这篇⽂章并对JVM并没有挖掘得很深,在下⽬前暂时也没有这个能⼒,只是以通熟易懂的⽅式,让读者理解JVM是个什么玩意。
下⾯开始我的讲解。
⼆.谁说⼈神不得相爱——Java的跨平台 理解Java的跨平台特性,是对JVM最直观的认识。
所谓的“⼀次编译,到处运⾏”,为什么C/C++ 却不能实现呢?这⼀类语⾔直接使⽤物理硬件(或者说操作系统的内存模型),那么不同系统之间的内存模型是不同的,⽐如说Linux和Window,这就意味,在Window编译好的代码,却不能在Linux上运⾏。
《深⼊理解Java虚拟机》记录说,Java虚拟机规范中试图定义⼀种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台上都能达到⼀致性的并发效果。
举个现实的例⼦,⼀个只会听说中⽂的⼈,要如何和⼀个只会听说英⽂的⼈交流,在Java的世界⾥,采⽤的⽅式即是给两边的⼈各配⼀名翻译官(JVM),所以,这就是为什么JVM要有window版本,也要有Linux版本。
众所周知,Java的程序编译的最终样⼦是.class⽂件,不同虚拟机的对每⼀个.class⽂件的翻译结果都是⼀致的。
⽽对于C/C++⽽⾔,编译⽣成的是纯⼆进制的机器指令,是直接⾯对计算机系统的内存,但是,java程序的编译结果是⾯向JVM,是要交付给JVM,让他再做进⼀步处理从⽽让计算机识别运⾏,这就是所谓的“屏蔽掉各种硬件和操作系统的内存访问差异”。
这⾥的特点⼜和⾯向对象推崇的⾯向接⼝有着不可描述的关系,我只需要有这么个规范,不需要去知道接触你的底层原理实现。
三.活在梦⾥的真实——虚拟机 JVM,全称Java Virtual Machine,英⽂为Java虚拟机,简单的探讨⼀下虚拟机这三个字,对后⾯的学习也是挺舒服的。
深入理解java虚拟机《深入理解Java虚拟机:JVM高级特性与最佳实践》内容简介:作为一位Java程序员,你是否也曾经想深入理解Java虚拟机,但是却被它的复杂和深奥拒之门外?没关系,本书极尽化繁为简之妙,能带领你在轻松中领略Java虚拟机的奥秘。
本书是近年来国内出版的唯一一本与Java虚拟机相关的专著,也是唯一一本同时从核心理论和实际运用这两个角度去探讨Java虚拟机的著作,不仅理论分析得透彻,而且书中包含的典型案例和最佳实践也极具现实指导意义。
全书共分为五大部分。
第一部分从宏观的角度介绍了整个Java技术体系的过去、现在和未来,以及如何独立地编译一个OpenJDK7,这对理解后面的内容很有帮助。
第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见的虚拟机的监控与调试工具的原理和使用方法。
第三部分分析了虚拟机的执行子系统,包括Class的文件结构以及如何存储和访问Class中的数据;虚拟机的类创建机制以及类加载器的工作原理和它对虚拟机的意义;虚拟机字节码的执行引擎以及它在实行代码时涉及的内存结构。
第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果。
第五部分探讨了Java实现高效并发的原理,包括JVM 内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。
本书适合所有Java程序员、系统调优师和系统架构师阅读。
[1]图书目录前言致谢第一部分走近Java第1章走近Java / 21.1 概述/ 21.2 Java技术体系 / 31.3 Java发展史/ 51.4 展望Java技术的未来/ 91.4.1 模块化/ 91.4.2 混合语言/ 91.4.3 多核并行/ 111.4.4 进一步丰富语法/ 121.4.5 64位虚拟机 / 131.5 实战:自己编译JDK / 131.5.1 获取JDK源码/ 131.5.2 系统需求/ 141.5.3 构建编译环境/ 151.5.4 准备依赖项/ 171.5.5 进行编译/ 181.6 本章小结/ 21第二部分自动内存管理机制第2章Java内存区域与内存溢出异常/ 24 2.1 概述/ 242.2 运行时数据区域/ 252.2.1 程序计数器 / 252.2.2 Java虚拟机栈/ 262.2.3 本地方法栈/ 272.2.4 Java堆/ 272.2.5 方法区/ 282.2.6 运行时常量池/ 292.2.7 直接内存/ 292.3 对象访问/ 302.4 实战:OutOfMemoryError异常/ 32 2.4.1 Java堆溢出/ 322.4.2 虚拟机栈和本地方法栈溢出 / 352.4.3 运行时常量池溢出/ 382.4.4 方法区溢出/ 392.4.5 本机直接内存溢出 / 412.5 本章小结/ 42第3章垃圾收集器与内存分配策略/ 43 3.1 概述/ 433.2 对象已死?/ 443.2.1 引用计数算法/ 443.2.2 根搜索算法/ 463.2.3 再谈引用/ 473.2.4 生存还是死亡?/ 483.2.5 回收方法区/ 503.3 垃圾收集算法/ 513.3.1 标记-清除算法/ 513.3.2 复制算法/ 523.3.3 标记-整理算法/ 543.3.4 分代收集算法/ 543.4 垃圾收集器/ 553.4.1 Serial收集器 / 563.4.2 ParNew收集器 / 573.4.3 Parallel Scavenge收集器/ 593.4.4 Serial Old收集器/ 603.4.5 Parallel Old收集器/ 613.4.6 CMS收集器 / 613.4.7 G1收集器 / 643.4.8 垃圾收集器参数总结/ 643.5 内存分配与回收策略/ 653.5.1 对象优先在Eden分配/ 663.5.2 大对象直接进入老年代/ 683.5.3 长期存活的对象将进入老年代/ 693.5.4 动态对象年龄判定/ 713.5.5 空间分配担保/ 733.6 本章小结/ 75第4章虚拟机性能监控与故障处理工具/ 76 4.1 概述/ 764.2 JDK的命令行工具/ 764.2.1 jps:虚拟机进程状况工具/ 794.2.2 jstat:虚拟机统计信息监视工具/ 80 4.2.3 jinfo:Java配置信息工具/ 824.2.4 jmap:Java内存映像工具/ 824.2.5 jhat:虚拟机堆转储快照分析工具/ 84 4.2.6 jstack:Java堆栈跟踪工具/ 854.3 JDK的可视化工具/ 874.3.1 JConsole:Java监视与管理控制台 / 88 4.3.2 VisualVM:多合一故障处理工具/ 96 4.4 本章小结/ 105第5章调优案例分析与实战/ 1065.1 概述/ 1065.2 案例分析/ 1065.2.1 高性能硬件上的程序部署策略/ 106 5.2.2 集群间同步导致的内存溢出 / 1095.2.3 堆外内存导致的溢出错误/ 1105.2.4 外部命令导致系统缓慢/ 1125.2.5 服务器JVM进程崩溃/ 1135.3 实战:Eclipse运行速度调优/ 1145.3.1 调优前的程序运行状态/ 1145.3.2 升级JDK 1.6的性能变化及兼容问题/ 117 5.3.3 编译时间和类加载时间的优化/ 1225.3.4 调整内存设置控制垃圾收集频率/ 1265.3.5 选择收集器降低延迟/ 1305.4 本章小结/ 133第三部分虚拟机执行子系统第6章类文件结构/ 1366.1 概述/ 1366.2 无关性的基石/ 1366.3 Class类文件的结构/ 1386.3.1 魔数与Class文件的版本/ 1396.3.2 常量池 / 1416.3.3 访问标志/ 1476.3.4 类索引、父类索引与接口索引集合/ 148 6.3.5 字段表集合/ 1496.3.6 方法表集合/ 1536.3.7 属性表集合/ 1556.4 Class文件结构的发展/ 1686.5 本章小结/ 170第7章虚拟机类加载机制/ 1717.1 概述/ 1717.2 类加载的时机/ 1727.3 类加载的过程/ 1767.3.1 加载/ 1767.3.2 验证/ 1787.3.3 准备/ 1817.3.4 解析/ 1827.3.5 初始化/ 1867.4 类加载器/ 1897.4.1 类与类加载器/ 1897.4.2 双亲委派模型/ 1917.4.3 破坏双亲委派模型/ 1947.5 本章小结/ 197第8章虚拟机字节码执行引擎/ 1988.1 概述/ 1988.2 运行时栈帧结构/ 1998.2.1 局部变量表/ 1998.2.2 操作数栈/ 2048.2.3 动态连接/ 2068.2.4 方法返回地址/ 2068.2.5 附加信息/ 2078.3 方法调用/ 2078.3.1 解析/ 2078.3.2 分派/ 2098.4 基于栈的字节码解释执行引擎/ 2218.4.1 解释执行/ 2218.4.2 基于栈的指令集与基于寄存器的指令集/ 223 8.4.3 基于栈的解释器执行过程/ 2248.5 本章小结/ 230第9章类加载及执行子系统的案例与实战/ 231 9.1 概述/ 2319.2 案例分析/ 2319.2.1 Tomcat:正统的类加载器架构/ 2329.2.2 OSGi:灵活的类加载器架构/ 2359.2.3 字节码生成技术与动态代理的实现/ 2389.2.4 Retrotranslator:跨越JDK版本/ 2429.3 实战:自己动手实现远程执行功能/ 2469.3.1 目标/ 2469.3.2 思路/ 2479.3.3 实现/ 2489.3.4 验证/ 2559.4 本章小结/ 256第四部分程序编译与代码优化第10章早期(编译期)优化/ 25810.1 概述/ 25810.2 Javac编译器/ 25910.2.1 Javac的源码与调试/ 25910.2.2 解析与填充符号表/ 26210.2.3 注解处理器/ 26410.2.4 语义分析与字节码生成/ 26410.3 Java语法糖的味道/ 26810.3.1 泛型与类型擦除/ 26810.3.2 自动装箱、拆箱与遍历循环/ 27310.3.3 条件编译 / 27510.4 实战:插入式注解处理器/ 27610.4.1 实战目标/ 27610.4.2 代码实现/ 27710.4.3 运行与测试/ 28410.4.4 其他应用案例/ 28610.5 本章小结/ 286第11章晚期(运行期)优化/ 28711.1 概述/ 28711.2 HotSpot虚拟机内的即时编译器 / 28811.2.1 解释器与编译器/ 28811.2.2 编译对象与触发条件/ 29111.2.3 编译过程/ 29411.2.4 查看与分析即时编译结果/ 29711.3 编译优化技术/ 30111.3.1 优化技术概览/ 30111.3.2 公共子表达式消除/ 30511.3.3 数组边界检查消除/ 30711.3.4 方法内联/ 30711.3.5 逃逸分析/ 30911.4 Java与C/C++的编译器对比/ 31111.5 本章小结/ 313第五部分高效并发第12章 Java内存模型与线程/ 31612.1 概述/ 31612.2 硬件的效率与一致性/ 31712.3 Java内存模型/ 31812.3.1 主内存与工作内存/ 31912.3.2 内存间交互操作/ 32012.3.3 对于volatile型变量的特殊规则/ 32212.3.4 对于long和double型变量的特殊规则/ 327 12.3.5 原子性、可见性与有序性/ 32812.3.6 先行发生原则/ 33012.4 Java与线程/ 33312.4.1 线程的实现/ 33312.4.2 Java线程调度/ 33712.4.3 状态转换/ 33912.5 本章小结/ 341第13章线程安全与锁优化/ 34213.1 概述/ 34213.2 线程安全/ 34313.2.1 Java语言中的线程安全/ 34313.2.2 线程安全的实现方法/ 34813.3 锁优化/ 35613.3.1 自旋锁与自适应自旋 / 35613.3.2 锁消除/ 35713.3.3 锁粗化/ 35813.3.4 轻量级锁/ 35813.3.5 偏向锁/ 36113.4 本章小结/ 362附录A Java虚拟机家族/ 363附录B 虚拟机字节码指令表/ 366附录C HotSpot虚拟机主要参数表/ 372附录D 对象查询语言(OQL)简介/ 376附录E JDK历史版本轨迹/ 383作者简介周志明,资深Java技术专家,对JavaEE企业级应用开发、OSGi、Java虚拟机和工作流等都有深入的研究,并在大量的实践中积累了丰富的经验。