深入理解Java虚拟机(第2版)

出版社:机械工业出版社
出版日期:2013-9-1
ISBN:9787111421900
作者:周志明
页数:433页

前言

前言Java是目前用户最多、使用范围最广的软件开发技术之一。Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java API、Java编程语言及许多第三方Java框架(如Spring、Struts等)构成。在国内,有关Java API、Java语言语法及第三方框架的技术资料和书籍非常丰富,相比之下,有关Java虚拟机的资料却显得异常贫乏。这种状况在很大程度上是由Java开发技术本身的一个重要优点导致的:在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性。运行程序的物理机器的情况千差万别,而Java虚拟机则在千差万别的物理机上建立了统一的运行平台,实现了在任意一台虚拟机上编译的程序都能在任何一台虚拟机上正常运行。这一极大优势使得Java应用的开发比传统C/C++应用的开发更高效和快捷,程序员可以把主要精力集中在具体业务逻辑上,而不是物理硬件的兼容性上。在一般情况下,一个程序员只要了解了必要的Java API、Java语法,以及学习适当的第三方开发框架,就已经基本能满足日常开发的需要了,虚拟机会在用户不知不觉中完成对硬件平台的兼容及对内存等资源的管理工作。因此,了解虚拟机的运作并不是一般开发人员必须掌握的知识。然而,凡事都具备两面性。随着Java技术的不断发展,它被应用于越来越多的领域之中。其中一些领域,如电力、金融、通信等,对程序的性能、稳定性和可扩展性方面都有极高的要求。程序很可能在10个人同时使用时完全正常,但是在10?000个人同时使用时就会缓慢、死锁,甚至崩溃。毫无疑问,要满足10?000个人同时使用需要更高性能的物理硬件,但是在绝大多数情况下,提升硬件效能无法等比例地提升程序的运作性能和并发能力,甚至可能对程序运作状况完全没有任何改善。这里面有Java虚拟机的原因:为了达到给所有硬件提供一致的虚拟平台的目的,牺牲了一些与硬件相关的性能特性。更重要的是人为原因:如果开发人员不了解虚拟机一些技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。其实,目前商用的高性能Java虚拟机都提供了相当多的优化特性和调节手段,用于满足应用程序在实际生产环境中对性能和稳定性的要求。如果只是为了入门学习,让程序在自己的机器上正常运行,那么这些特性可以说是可有可无的;如果用于生产开发,尤其是企业级生产开发,就迫切需要开发人员中至少有一部分人对虚拟机的特性及调节方法具有很清晰的认识,所以在Java开发体系中,对架构师、系统调优师、高级程序员等角色的需求一直都非常大。学习虚拟机中各种自动运作特性的原理也成为了Java程序员成长道路上必然会接触到的一课。本书可以使读者以一种相对轻松的方式学习虚拟机的运作原理,对Java程序员的成长也有较大的帮助。第2版与第1版的区别JDK 1.7在2011年7月28日正式发布,相对于2006年发布的JDK 1.6,新版的JDK有了许多新的特性和改进。本书的第2版也相应地进行了修改和升级,把讲解的技术平台从JDK 1.6提升至JDK 1.7。例如,增加了对JDK 1.7中最新的G1收集器,以及JDK 1.7中JSR-292 InvokeDynamic(对非Java语言的调用支持)的分析讲解等内容。在第1版出版后,笔者收到了许多热心读者的反馈意见,部分读者提出OpenJDK开源已久,第1版却很少有直接分析OpenJDK源码的内容,有点“视宝山而不见”的感觉。因此,在本书第2版中,笔者特别加强了对这部分内容的讲解,其中在第1章中就介绍了如何分析、调试OpenJDK源码等。在本书后续章节中,不少关于功能点的讲解都直接使用OpenJDK中的HotSpot源码或者JIT编译器生成的本地代码作为论据。如何把Java虚拟机原理中许多理论性很强的知识、特性应用于实践开发,是本书贯穿始终的主旨。由于笔者希望在本书第2版中进一步加强知识的实践性,因此增加了许多对处理JVM常见问题技能的讲解,包括如何分析GC日志、如何分析JIT编译器代码优化过程和生成代码等。并且,在第1版的基础上,第2版中进一步增加了若干处理JVM问题的实践案例供读者参考。另外,本书第2版还修正了第1版中多处错误的、有歧义的和不完整的描述。有关勘误信息,可以参考第1版的勘误页面。本书面向的读者(1)使用Java技术体系的中、高级开发人员Java虚拟机作为中、高级开发人员必须修炼的知识,有着较高的学习门槛,本书可作为学习虚拟机的优秀教材。(2)系统调优师系统调优师是近几年才兴起的职业,本书中的大量案例、代码和调优实战将会对系统调优师的日常工作有直接的帮助。(3)系统架构师保障系统的性能、并发和伸缩等能力是系统架构师的主要职责之一,而这部分与虚拟机的运作密不可分,本书可以作为他们制定应用系统底层框架的参考资料。如何阅读本书本书一共分为五个部分:走近Java、自动内存管理机制、虚拟机执行子系统、程序编译与代码优化、高效并发。各部分基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分中的各个章节间有先后顺序。本书并没有假设读者在Java领域具备很专业的技术水平,因此在保证逻辑准确的前提下,尽量用通俗的语言和案例讲述虚拟机中与开发的关系最为密切的内容。当然,学习虚拟机技术本身就需要读者有一定的基础,且本书的读者定位是中、高级程序员,因此本书假设读者自己了解一些常用的开发框架、Java API和Java语法等基础知识。笔者希望读者在阅读本书的同时,把本书中的实践内容亲自验证一遍,其中用到的代码清单可以从华章网站下载。语言约定本书在语言和技术上有如下约定:本书中提到HotSpot、JRockit虚拟机、WebLogic服务器等产品的所有者时,仍然使用Sun和BEA公司的名称,实际上,BEA和Sun分别于2008年和2009年被Oracle公司收购,现在已经不存在这两个商标了,但毫无疑问的是,它们都是在Java领域中做出过卓越贡献的、值得程序员纪念的公司。JDK从1.5版本开始,在官方的正式文档与宣传资料中已经不再使用类似“JDK 1.5”的名称,只有程序员内部使用的开发版本号(Developer Version,例如java-version的输出)才继续沿用1.5、1.6和1.7的版本号,而公开版本号(Product Version)则改为JDK 5、JDK 6和JDK 7的命名方式,为了行文一致,本书所有场合统一采用开发版本号的命名方式。由于版面关系,本书中的许多示例代码都没有遵循最优的代码编写风格,如使用的流没有关闭流等,请读者在阅读时注意这一点。如果没有特殊说明,本书中所有讨论都是以Sun JDK 1.7为技术平台的。不过如果有某个特性在各个版本间的变化较大,一般都会说明它在各个版本间的差异。内容特色第一部分 走近Java本书的第一部分为后文的讲解建立了良好的基础。尽管了解Java技术的来龙去脉,以及编译自己的OpenJDK对于读者理解Java虚拟机并不是必需的,但是这些准备过程可以为走近Java技术和Java虚拟机提供很好的引导。第一部分只有第1章:第1章 介绍了Java技术体系的过去、现在和未来的一些发展趋势,并介绍了如何独立地编译一个OpenJDK 7。第二部分 自动内存管理机制因为程序员把内存控制的权力交给了Java虚拟机,所以可以在编码的时候享受自动内存管理的诸多优势,不过也正是这个原因,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的工作。第二部分包括第2~5章:第2章 讲解了虚拟机中内存是如何划分的,以及哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。第3章 分析了垃圾收集的算法和JDK 1.7中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了Java虚拟机中自动内存分配及回收的主要规则。第4章 介绍了随JDK发布的6个命令行工具与两个可视化的故障处理工具的使用方法。第5章 与读者分享了几个比较有代表性的实际案例,还准备了一个所有开发人员都能“亲身实战”的练习,读者可通过实践来获得故障处理和调优的经验。第三部分 虚拟机执行子系统执行子系统是虚拟机中必不可少的组成部分,了解了虚拟机如何执行程序,才能写出更优秀的代码。第三部分包括第6~9章:第6章 讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法,以实战的方式演示了Class文件的数据是如何存储和访问的。第7章 介绍了类加载过程的“加载”、“验证”、“准备”、“解析”和“初始化”5个阶段中虚拟机分别执行了哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。第8章 分析了虚拟机在执行代码时如何找到正确的方法,如何执行方法内的字节码,以及执行代码时涉及的内存结构。第9章 通过4个类加载及执行子系统的案例,分享了使用类加载器和处理字节码的一些值得欣赏和借鉴的思路,并通过一个实战练习来加深对前面理论知识的理解。第四部分 程序编译与代码优化Java程序从源码编译成字节码和从字节码编译成本地机器码的这两个过程,合并起来其实就等同于一个传统编译器所执行的编译过程。第四部分包括第10~11章:第10章 分析了Java语言中泛型、主动装箱和拆箱、条件编译等多种语法糖的前因后果,并通过实战演示了如何使用插入式注解处理器来实现一个检查程序命名规范的编译器插件。第11章 讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果,此外,还讲解了几种常见的编译优化技术。第五部分 高效并发Java语言和虚拟机提供了原生的、完善的多线程支持,这使得它天生就适合开发多线程并发的应用程序。不过我们不能期望系统来完成所有并发相关的处理,了解并发的内幕也是成为一个高级程序员不可缺少的课程。第五部分包括第12~13章:第12章 讲解了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现,介绍了先行发生原则的规则及使用,还了解了线程在Java语言中是如何实现的。第13章 介绍了线程安全涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机实现高效并发所采取的一系列锁优化措施。参考资料本书名为“深入理解Java虚拟机”,但要想深入理解虚拟机,仅凭一本书肯定是远远不够的,读者可以通过以下信息找到更多关于Java虚拟机方面的资料。我在写作此书的时候,也从下面这些参考资料中获得了很大的帮助。……勘误和支持在本书交稿的时候,我并不像想象中的那样兴奋或放松,写作之时那种“战战兢兢、如履薄冰”的感觉依然萦绕在心头。在每一章、每一节落笔之时,我都在考虑如何才能把各个知识点更有条理地讲述出来,同时也在担心会不会由于自己理解有偏差而误导了读者。由于写作水平和写作时间所限,书中难免存在不妥之处,大家如有任何意见或建议欢迎与我联系。相信写书与写程序一样,作品一定都是不完美的,因为不完美,我们才有不断追求完美的动力。本书第2版的勘误,将会在作者的博客中发布。欢迎读者在博客上留言。致谢首先要感谢我的家人,在本书写作期间全靠他们对我的悉心照顾,才让我能够全身心地投入到写作之中,而无后顾之忧。同时要感谢我的工作单位远光软件,公司为我提供了宝贵的工作、学习和实践的环境,书中的许多知识点都来自于工作中的实践;也感谢与我一起工作的同事们,非常荣幸能与你们一起在这个富有激情的团队中共同奋斗。还要感谢Oracle公司虚拟机团队的莫枢,在百忙之中抽空审阅了本书,提出了许多宝贵的建议和意见。最后,感谢机械工业出版社华章公司的编辑,本书能够顺利出版离不开他们的敬业精神和一丝不苟的工作态度。周志明

内容概要

周志明,资深Java技术专家,对JavaEE企业级应用开发、OSGi、Java虚拟机和工作流等都有深入的研究,并在大量的实践中积累了丰富的经验。尤其精通Java虚拟机,撰写了大量与JVM相关的经典文章,被各大技术社区争相转载,是ITeye等技术社区公认的Java虚拟机方面的领袖人物之一。除本书外,还著有经典著作《深入理解OSGi:Equinox原理、应用与最佳实践》,广获读者好评。现任远光软件股份有限公司开发部总经理兼架构师,先后参与过国家电网、南方电网等多个国家级大型ERP项目的平台架构工作,对软件系统架构也有深刻的认识和体会。

书籍目录

前言
第一部分走近Java
第1章走近Java2
1.1概述2
1.2Java技术体系3
1.3Java发展史5
1.4Java虚拟机发展史9
1.4.1SunClassicExactVM9
1.4.2SunHotSpotVM11
1.4.3SunMobile—EmbeddedVMMeta—CircularVM12
1.4.4BEAJRockitIBMJ9VM13
1.4.5AzulVMBEALiquidVM14
1.4.6ApacheHarmonyGoogleAndroidDalvikVM14
1.4.7MicrosoftJVM及其他15
1.5展望Java技术的未来16
1.5.1模块化17
1.5.2混合语言17
1.5.3多核并行19
1.5.4进一步丰富语法20
1.5.564位虚拟机21
1.6实战:自己编译JDK22
1.6.1获取JDK源码22
1.6.2系统需求24
1.6.3构建编译环境25
1.6.4进行编译26
1.6.5在IDE工具中进行源码调试31
1.7本章小结35
第二部分自动内存管理机制
第2章Java内存区域与内存溢出异常38
2.1概述38
2.2运行时数据区域38
2.2.1程序计数器39
2.2.2Java虚拟机栈39
2.2.3本地方法栈40
2.2.4Java堆41
2.2.5方法区41
2.2.6运行时常量池42
2.2.7直接内存43
2.3HotSpot虚拟机对象探秘43
2.3.1对象的创建44
2.3.2对象的内存布局47
2.3.3对象的访问定位48
2.4实战:OutOfMemoryError异常50
2.4.1Java堆溢出51
2.4.2虚拟机栈和本地方法栈溢出53
2.4.3方法区和运行时常量池溢出56
2.4.4本机直接内存溢出59
2.5本章小结60
第3章垃圾收集器与内存分配策略61
3.1概述61
3.2对象已死吗62
3.2.1引用计数算法62
3.2.2可达性分析算法64
3.2.3再谈引用65
3.2.4生存还是死亡66
3.2.5回收方法区68
3.3垃圾收集算法69
3.3.1标记—清除算法69
3.3.2复制算法70
3.3.3标记—整理算法71
3.3.4分代收集算法72
3.4HotSpot的算法实现72
3.4.1枚举根节点72
3.4.2安全点73
3.4.3安全区域74
3.5垃圾收集器75
3.5.1Serial收集器76
3.5.2ParNew收集器77
3.5.3ParallelScavenge收集器79
3.5.4SerialOld收集器80
3.5.5ParallelOld收集器80
3.5.6CMS收集器81
3.5.7G1收集器84
3.5.8理解GC日志89
3.5.9垃圾收集器参数总结90
3.6内存分配与回收策略91
3.6.1对象优先在Eden分配91
3.6.2大对象直接进入老年代93
3.6.3长期存活的对象将进入老年代95
3.6.4动态对象年龄判定97
3.6.5空间分配担保98
3.7本章小结100
第4章虚拟机性能监控与故障处理工具101
4.1概述101
4.2JDK的命令行工具101
4.2.1jps:虚拟机进程状况工具104
4.2.2jstat:虚拟机统计信息监视工具105
4.2.3jinfo:Java配置信息工具106
4.2.4jmap:Java内存映像工具107
4.2.5jhat:虚拟机堆转储快照分析工具108
4.2.6jstack:Java堆栈跟踪工具109
4.2.7HSDIS:JIT生成代码反汇编111
4.3JDK的可视化工具114
4.3.1JConsole:Java监视与管理控制台115
4.3.2VisualVM:多合一故障处理工具122
4.4本章小结131
第5章调优案例分析与实战132
5.1概述132
5.2案例分析132
5.2.1高性能硬件上的程序部署策略132
5.2.2集群间同步导致的内存溢出135
5.2.3堆外内存导致的溢出错误136
5.2.4外部命令导致系统缓慢137
5.2.5服务器JVM进程崩溃138
5.2.6不恰当数据结构导致内存占用过大139
5.2.7由Windows虚拟内存导致的长时间停顿141
5.3实战:Eclipse运行速度调优142
5.3.1调优前的程序运行状态142
5.3.2升级JDK1.6的性能变化及兼容问题145
5.3.3编译时间和类加载时间的优化150
5.3.4调整内存设置控制垃圾收集频率153
5.3.5选择收集器降低延迟157
5.4本章小结160
第三部分虚拟机执行子系统
第6章类文件结构162
6.1概述162
6.2无关性的基石162
6.3Class类文件的结构164
6.3.1魔数与Class文件的版本166
6.3.2常量池167
6.3.3访问标志173
6.3.4类索引、父类索引与接口索引集合174
6.3.5字段表集合175
6.3.6方法表集合178
6.3.7属性表集合180
6.4字节码指令简介196
6.4.1字节码与数据类型197
6.4.2加载和存储指令199
6.4.3运算指令200
6.4.4类型转换指令202
6.4.5对象创建与访问指令203
6.4.6操作数栈管理指令203
6.4.7控制转移指令204
6.4.8方法调用和返回指令204
6.4.9异常处理指令205
6.4.10同步指令205
6.5公有设计和私有实现206
6.6Class文件结构的发展207
6.7本章小结208
第7章虚拟机类加载机制209
7.1概述209
7.2类加载的时机210
7.3类加载的过程214
7.3.1加载214
7.3.2验证216
7.3.3准备219
7.3.4解析220
7.3.5初始化225
7.4类加载器227
7.4.1类与类加载器228
7.4.2双亲委派模型229
7.4.3破坏双亲委派模型233
7.5本章小结235
第8章虚拟机字节码执行引擎236
8.1概述236
8.2运行时栈帧结构236
8.2.1局部变量表238
8.2.2操作数栈242
8.2.3动态连接243
8.2.4方法返回地址243
8.2.5附加信息244
8.3方法调用244
8.3.1解析244
8.3.2分派246
8.3.3动态类型语言支持258
8.4基于栈的字节码解释执行引擎269
8.4.1解释执行269
8.4.2基于栈的指令集与基于寄存器的指令集270
8.4.3基于栈的解释器执行过程272
8.5本章小结275
第9章类加载及执行子系统的案例与实战276
9.1概述276
9.2案例分析276
9.2.1Tomcat:正统的类加载器架构276
9.2.2OSGi:灵活的类加载器架构279
9.2.3字节码生成技术与动态代理的实现282
9.2.4Retrotranslator:跨越JDK版本286
9.3实战:自己动手实现远程执行功能289
9.3.1目标290
9.3.2思路290
9.3.3实现291
9.3.4验证298
9.4本章小结299
第四部分程序编译与代码优化
第10章早期(编译期)优化302
10.1概述302
10.2Javac编译器303
10.2.1Javac的源码与调试303
10.2.2解析与填充符号表305
10.2.3注解处理器307
10.2.4语义分析与字节码生成307
10.3Java语法糖的味道311
10.3.1泛型与类型擦除311
10.3.2自动装箱、拆箱与遍历循环315
10.3.3条件编译317
10.4实战:插入式注解处理器318
10.4.1实战目标318
10.4.2代码实现319
10.4.3运行与测试326
10.4.4其他应用案例327
10.5本章小结328
第11章晚期(运行期)优化329
11.1概述329
11.2HotSpot虚拟机内的即时编译器329
11.2.1解释器与编译器330
11.2.2编译对象与触发条件332
11.2.3编译过程337
11.2.4查看及分析即时编译结果339
11.3编译优化技术345
11.3.1优化技术概览346
11.3.2公共子表达式消除350
11.3.3数组边界检查消除351
11.3.4方法内联352
11.3.5逃逸分析354
11.4Java与C/C++的编译器对比356
11.5本章小结358
第五部分高效并发
第12章Java内存模型与线程360
12.1概述360
12.2硬件的效率与一致性361
12.3Java内存模型362
12.3.1主内存与工作内存363
12.3.2内存间交互操作364
12.3.3对于volatile型变量的特殊规则366
12.3.4对于long和double型变量的特殊规则372
12.3.5原子性、可见性与有序性373
12.3.6先行发生原则375
12.4Java与线程378
12.4.1线程的实现378
12.4.2Java线程调度381
12.4.3状态转换383
12.5本章小结384
第13章线程安全与锁优化385
13.1概述385
13.2线程安全385
13.2.1Java语言中的线程安全386
13.2.2线程安全的实现方法390
13.3锁优化397
13.3.1自旋锁与自适应自旋398
13.3.2锁消除398
13.3.3锁粗化400
13.3.4轻量级锁400
13.3.5偏向锁402
13.4本章小结403
附录
附录A编译Windows版的OpenJDK406
附录B虚拟机字节码指令表414
附录CHotSpot虚拟机主要参数表420
附录D对象查询语言(OQL)简介424
附录EJDK历史版本轨迹430

编辑推荐

《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》编辑推荐:超级畅销书全新升级,第1版两年内印刷近10次,Java图书领域公认的经典著作,繁体版台湾发行。基于最新JDK1.7,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行全面而深入的分析,深刻揭示JVM的工作原理。以实践为导向,通过大量与实际生产环境相结合的案例展示了解决各种常见JVM问题的技巧和最佳实践。

作者简介

《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》内容简介:第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的改进:根据最新的JDK 1.7对全书内容进行了全面的升级和补充;增加了大量处理各种常见JVM问题的技巧和最佳实践;增加了若干与生产环境相结合的实战案例;对第1版中的错误和不足之处的修正;等等。第2版不仅技术更新、内容更丰富,而且实战性更强。
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。
第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解书中后面内容有重要帮助。
第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。
第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。
第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果;
第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。


 深入理解Java虚拟机(第2版)下载 更多精彩书评



发布书评

 
 


精彩书评 (总计7条)

  •     如标题首先很佩服、欣喜能看到国人出的关于Java虚拟机的书写了4年java代码,对虚拟机是从没认真了解过看到书名“深入理解……”,果断网购阅读读完后,总感觉,还缺点儿啥,貌似自己的一些问题在书中未能找到答案不过,总体上来说,也是有收获的,稍有【遗憾】的是书中提到的有些概念,只用了极少的篇幅说明性的带过,没能深入,有些不过瘾!!!整体来看,全书都是在围绕【虚拟机】进行讲解叙述读完后,却像是在读一本散文集,书中的概念用辞有些像是翻译的-读起来有点儿生硬,有些好像同一个概念前后章节描述用辞不一致,读起来不太顺畅,不像很多外文书,全书同一个概念统一用辞,读起来从不会打岔……书中提供的实例,对于理解或实际应用,倒是比较实用,赞一个!个人感觉,读这本书到不需要太多实际经验,适合入门和概念性了解虚拟机的一些知识,总体感觉还可以,推荐下!
  •     最大的体会是,对JVM的工作机制讲解的非常透彻,尤其是对java运行时数据区域的介绍,给人茅塞顿开之感。本书适合所有对JVM的工作机制感兴趣的Java开发者,国内少有的分析JVM实现原理一本书,同时本书的实践性也很好
  •     对于java新手来说,阅读jvm相关的书籍是自讨苦吃,可偏偏有人要“考”我一些jvm的知识,觉得甚是不爽。对于一个c语言出生,混迹在linux内核的人来讲,了解jvm有何难度。毕竟jvm属于java底层,难免需要一些计算机的基础知识,什么内存模型,cpu指令集,cache相关知识总得知道。若有编译原理相关知识,那阅读绝对是帮助周志明老是纠错呀。全书阅读不算有太多难度,主要在于java入门时间较短,一些spec规范尚未听说,对于全书学习来说还算不错。用书上的知识印证自己对java底层实现的猜测是非常爽的(有些自大噢噢~~~~)通过本书阅读,对后续java深入理解起码知道一些关键技术的出处,不会傻不拉几的把任何技术特性归为jdk的特性了另外补充,计算机相关书籍但凡国人著的,十有八九都很烂,但这本书内容深浅都非常nice...这个可能需要归功阿里巴巴在这方面输出了很多java人才,在社区也贡献了n多的框架有关系...

精彩短评 (总计69条)

  •     与第一版JDK1.6的差不多,内容改动较少
  •     花了2个月 总于看完了,内容需要花时间理解,边看边google,有些知识还是没有很好理解,以后还得再看看
  •     将jvm虚拟机通俗易懂的表达出来,jvm内存管理,执行子系统,编译子系统等。
  •     好书!
  •     该出第三版了。。
  •     读技术书总是这么走马观花上哪行的啊……
  •     一本介绍JVM的书籍,这本我是挑着章节看的,感觉讲解非常好,不会这么晦涩,值得反复读阅!
  •     对于了解java或c++,想看看虚拟机是怎么回事的可以看看。 虽然很多地方作者没进一步讲解,甚至让人感觉作者自己也没弄深入。不过,对于没看过jvm的来说,还是不错的资料。 建议看两边后,再到网上找一些jvm系列的帖子,很多书中没涉及或深入的内容,可以真正深入得了解。比如safe point/ safe regin等内容。
  •     囫囵吞枣看完了?自己对内存管理那块很感兴趣,也没明白太深。
  •     送上五分把,这次是第四遍看了,整体覆盖面挺广,从gc到内存模型到并发等等,但是深度都不够,适合做第一本入门书,gc部分就很浅显,cms和g1都只是点到为止,并发也只是开了个头,但是整体是本好书,毕竟不能面面俱到
  •     算是深入浅出吧,起码我看懂了一半多,对面试很有帮助
  •     电子书代码没有缩进,全部左对齐,出版社太不认真了
  •     接触java中比较底层的一些实现,很多细节都不是特别明白,书中涉及到的知识点还是很多,过段时间很容易忘记,需要融会贯通才行,并且在平时写代码的过程中多考虑这方面的问题,需要二刷的一本书。
  •     买了2年,拖延症看完了
  •     底层原理之美
  •     对jvm的理解是从这本书的第一版开始了,老外的那本都说比较经典,但是就是读不下去,这本书每次读完都有新的收获,有一些知识过一段时间就忘记了,需要反复研读才行。
  •     只读了暂时需要的章节,需要再读。
  •     好书,没的说
  •     讲的蛮好,进一步深入还需要继续学习。
  •     给小白我开启了java虚拟机的大门,相比国内的技术书籍还是挺nice的~
  •     虽然离Android稍有些远,但是对Android中的内存分配,dex合并,类加载机制有了更清晰的认知。
  •     第一版看的电子版,觉得还不错,刚好第二版出来了,就直接买了一本,现在才看到第四章,不过还没发现跟第一版有什么区别,希望后面的章节有提升。
  •     一般我不看好中国人写的书。水太多。不过这是目前为止我看过的所有书惟一的例外。
  •     关于JVM的国产良心书,力荐!!!
  •     这本书对于了解Java的底层,理解Java的整个体系是非常有帮助的,多读几遍,收益会很大。
  •     描述语言比较通俗,重点介绍了JVM对于开发者来说比较重要的部分,略去了一些底层实现细节。对了Java开发者来说有用。
  •     国内良心书,值得反复读的书,章节完全可以选择性的看
  •     感谢周老师的大作,看完后对java的理解更深了一层
  •     Java入门及面试必看书目之一
  •     今天刚收到书,就迫不及待的看起来了. 通读前面2章, 可以感觉到作者的治学的严谨。对于Java虚拟机而言,这本书是不可多得的参考书之一。
  •     我要读10遍~ (已读第二遍)
  •     只是在1版的基础上做了一点点改进
  •     来来回回读了好多遍了,棒。
  •     尻。我看的是第二版强无敌
  •     感觉条理清晰浅显易懂,就是不够深入。不过如果深入了的话,按照自己的渣渣水平很可能看不懂吧。
  •     对内存管理和垃圾回收介绍很详细,监控和优化工具和方法也很实用。以后工作中如果遇到性能方面的难题,我会感谢这本书。
  •     一直以来对国人写的书都不是很相信,所以尽管阅读英文有点痛苦,但英文书讲的往往比较透彻些,逻辑要严谨些,直到看过这本书,一下子颠覆了我以前的狭隘思维,国人鱼龙混杂的当然不在少数,但也有不少功底不错的作者,能够体会到这本书作者是真正花了心思的,逻辑流畅,通俗易懂。
  •     面试中关于JVM有不少知识点来自本书,其实要应付的话只要掌握运行时数据区、GC、类加载机制即可,再了解虚拟机参数设置调优、命令行工具。
  •     挺不错
  •     花了好大力气总算读完了,讲的很细致,也很深入,应该说适合每一个想在Java领域有所深入发展的程序员阅读的一本书。唯一的美中不足,Amazon Kindle的电子版代码排版实在是太差,完全没有缩进,太影响阅读体验
  •     相见恨晚啊,原来读虚拟规范的时候有的地方一头雾水。大部分内容很充实还要再读一遍。
  •     少有的国内对jvm深入介绍和剖析的好书,支持
  •     电子版封面没设置,里面代码没排版。不过内容还算充实语言朴素易懂
  •     这本书前后大概读过三次,这次可以说是硬着头皮啃完每一个字,尽量做到读懂大部分内容。我想对于接触Java三年以上的程序员,这本书绝对是非常值得一读的。
  •     这本书总的来说还符合他的书名,内容涉及面精而专,是一本值得推荐的好书,适合有基础的同学学习,哈哈
  •     很不错的一本讲解虚拟机的书,非常感谢作者!
  •     还可以吧,还没有看完,但基本上搞清楚一点东西了,书钱不能省
  •     不错,开阔了下见识,不过细细操作我还是得缓缓
  •     今天看了第四部分:程序编译与代码优化,忍不住过来盛赞一番。作者从原理出发,娓娓道来,为我解读了很多当年出血时不明所以的问题。作者以小见大,写作手法非常高妙,不得不服。高效并发那一部分,讲的何止是java,简直是计算机的基本原理。总之,书的内容不深,但很专业,绝不是那种一开始就教你安装eclipse的能够望其项背的。但是,还是不够深入,我想,这是因为作者是从业者,而不是科研人员。拿来读一读,绝对对得起一天的饭钱。
  •     一本讲晦涩的JVM讲解的简单明朗的一本好书
  •     本书目标JAVA体系特性的实现,系统编程涉及计算机结构和操作系统。系统定位问题:知识和经验是关键基础,数据是依据,工具是利用知识处理数据的手段,工具永远都是知识技能的一层包装,工具和知识弥补了经验的欠缺。页签等价于可视化命令。内存模型理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象,模型本身一般是围绕着过程中原子性,可见性,有序性这三个特征建立的。
  •     理解jvm的好书
  •     浅显易懂。最重要的是开启一扇理解虚拟机的大门。内存管理机制与Java内存模型、高效并发这三章是特别实用的。
  •     国内的Java进阶最佳书籍之一
  •     这本书我很喜欢,书已收到。很好。
  •     太过于理论了,感觉跟大学的教材差不多,个人功底实在太薄,看不太懂。
  •     16/11/16- Mark
  •     大体浏览了一下,挺好的,图有点山寨
  •     这本书对于JVM的入门者有很大的帮助的,但是在进阶上,就略显不足,希望作者能再出一本进阶的JVM书籍
  •     在国内技术类图书中很难得
  •     2016年10月24日开始读此书,11月2日读完
  •     除了class文件,其他不是很详细
  •     算是JVM入门介绍里的经典书籍,由于以前看过很多人写的jvm相关blog,提到的知识大致都是能从这本书中找出来。相关知识覆盖比较全面,虽然还不够深入,但通俗易懂是必须的!哈哈,看过一遍,书中给出的代码,由于个人水平有限,并不能解读JVM源码,希望下次就可以了!!!
  •     物流挺快,书本不错,纸张质量不错。
  •     有点堆砌的感觉,不好懂
  •     16年找工作的时读囫囵吞枣的读了这本书, 其中6.4节字节码部分以及第10章 编译器优化部分因为太干涩, 并没有读下去. 后面有时间后硬着头皮把这两部分也读完了. 这本书还是不错的, 覆盖的点比较多, 但是也没有大家说的那么神, 很多都是讲一下浅显的东西. 这本书也算是给我打开了JVM的大门, 通过这本书我觉得最主要的是我了解了Java虚拟机的发展历史, 有关Java虚拟机的一些名词的意思, Java虚拟机的内存结构, 能够使用命令行解决一些虚拟机gc调优的问题, 能够看懂简单的java字节码. 至于并发的部分, 很多其他书上都有, 比如java并发编程实战.
  •     学到很多,后悔没早读这本书
  •     不错,浅显易懂,目前看到第四章,很满意,看完后再回来写总结
  •     超棒,有点难,建议读之前有较丰富经验,对jdk比较熟悉
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024