基本信息
- 作者: 周志明(美)Brian Goetz Tim Peierls
- 译者: 童云兰
- 丛书名: 华章原创精品
- 出版社:机械工业出版社
- ISBN:9781912101453
- 上架时间:2019-12-10
- 出版日期:2019 年12月
- 开本:16开
- 页码:830
- 版次:1-1
- 所属分类:计算机 > 软件与程序设计 > JAVA(J#) > Java

编辑推荐
---------------------------Java并发编程实战---------------------------
第16届Jolt大奖提名图书
Java并发编程必读佳作
深入浅出地介绍了java线程和并发
一本完美的java并发参考手册
内容简介
计算机书籍
---------------------------深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)---------------------------
内容介绍
这是一部从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典,繁体版在台湾也颇受欢迎。
自2011年上市以来,前两个版本累计印刷36次,销量超过30万册,两家主要网络书店的评论近90000条,内容上近乎零差评,是原创计算机图书领域不可逾越的丰碑。
第3版在第2版的基础上做了重大修订,内容更丰富、实战性更强:根据新版JDK对内容进行了全方位的修订和升级,围绕新技术和生产实践新增逾10万字,包含近50%的全新内容,并对第2版中含糊、瑕疵和错误内容进行了修正。
全书一共13章,分为五大部分:
第一部分(第1章)走近Java
系统介绍了Java的技术体系、发展历程、虚拟机家族,以及动手编译JDK,了解这部分内容能对学习JVM提供良好的指引。
第二部分(第2~5章)自动内存管理
详细讲解了Java的内存区域与内存溢出、垃圾收集器与内存分配策略、虚拟机性能监控与故障排除等与自动内存管理相关的内容,以及10余个经典的性能优化案例和优化方法;
第三部分(第6~9章)虚拟机执行子系统
深入分析了虚拟机执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎,以及多个类加载及其执行子系统的实战案例;
第四部分(第10~11章)程序编译与代码优化
作译者
---------------------------深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)---------------------------
周志明 著:周志明
资深Java技术、机器学习和企业级开发技术专家,现任远光软件研究院院长,人工智能博士在读,著有知名畅销书《深入理解Java虚拟机:JVM高级特性与最佳实践》。
开源技术的积极倡导者和推动者,对计算机科学和相关的多个领域都有深刻的见解,尤其是人工智能、Java开发和敏捷开发等领域。曾受邀在InfoQ和IBM DeveloperWorks等网站撰写技术专栏。
著作颇丰,著有《深入理解Java虚拟机》《深入理解OSGi》,翻译了《Java虚拟机规范》等著作。其中《深入理解Java虚拟机》第1版出版于2011年,已经出至第2版,不仅销量好,而且口碑更好,累计印刷超过30次,仍长销不衰,是中文计算机图书领域公认的、难得一见的佳作。
---------------------------Java并发编程实战---------------------------
作者:盖茨(Brian Goetz) (美国)Tim Peierls (美国)Joshua Bloch 等 译者:童云兰 等
本书作者都是Java Community Process JSR 166专家组(并发工具)的主要成员,并在其他很多JCP专家组里任职。Brian Goetz有20多年的软件咨询行业经验,并著有至少75篇关于Java开发的文章。
Tim Peierls是“现代多处理器”的典范,他在BoxPop.biz、唱片艺术和戏剧表演方面也颇有研究。
Joseph Bowbeer是一个Java ME专家,他对并发编程的兴趣始于Apollo计算机时代。David Holmes是《The Java Programming Language》一书的合著者,任职于Sun公司。
目录
---------------------------深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)---------------------------
前言
致谢
第一部分 走近Java
第1章 走近Java 2
1.1 概述 2
1.2 Java技术体系 3
1.3 Java发展史 4
1.4 Java虚拟机家族 12
1.4.1 虚拟机始祖:Sun Classic/Exact VM 12
1.4.2 武林盟主:HotSpot VM 13
1.4.3 小家碧玉:Mobile/Embedded VM 14
1.4.4 天下第二:BEA JRockit/IBM J9 VM 15
1.4.5 软硬合璧:BEA Liquid VM/Azul VM 16
1.4.6 挑战者:Apache Harmony/Google Android Dalvik VM 17
译者序
---------------------------Java并发编程实战---------------------------
并发编程是Java语言的重要特性之一,在Java平台上提供了许多基本的并发功能来辅助开发多线程应用程序。然而,这些相对底层的并发功能与上层应用程序的并发语义之间并不存在一种简单而直观的映射关系。因此,如何在Java并发应用程序中正确且高效地使用这些功能就成了Java开发人员的关注重点。
本书正是为了解决这个问题而写的。书中采用循序渐进的讲解方式,从并发编程的基本理论入手,逐步介绍了在设计Java并发程序时各种重要的设计原则、设计模式以及思维模式,同时辅以丰富的示例代码作为对照和补充,使得开发人员能够更快地领悟Java并发编程的要领,围绕着Java平台的基础并发功能快速地构建大规模的并发应用程序。
全书内容由浅入深,共分为四个部分。第一部分介绍了Java并发编程的基础理论,包括线程安全性与状态对象的基础知识,如何构造线程安全的类并将多个小型的线程安全类构建成更大型的线程安全类,以及Java平台库中的一些基础并发模块;第二部分介绍了并发应用程序的构造理论,包括应用程序中并行语义的分解及其与逻辑任务的映射,任务的取消与关闭等行为的实现,以及Java线程池中的一些高级功能,此外还介绍了如何提高GUI应用程序的响应性;第三部分介绍了并发编程的性能调优,包括如何避免活跃性问题,如何提高并发代码的性能和可伸缩性以获得理想的性能,以及在测试并发代码正确性和性能时的一些实用技术;第四部分介绍了Java并发编程中的一些高级主题,包括显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类等。
本书的特点在于注重阐述并发技术背后的理论知识,对于每种技术的介绍不仅使读者能做到“知其然”,更能做到“知其所以然”。对于希望深入研究和探索Java并发编程的读者来说,本书是非常合适的。
参与本书翻译工作的还有李杨、吴汉平、徐光景、童胜汉、陈军、胡凯、刘红、张玮、陈红、李斌、李勇涛、王海涛、周云波、彭敏才、张世锋、朱介秋、宗敬、李静、叶锦、高波、熊莉、程凤、陈娟、胡世娟、董敏、谢路阳、冯卓、李志勇、胡欢、王进等。由于译者的时间和水平有限,翻译中的疏漏和错误在所难免,还望读者和同行不吝指正。
童云兰
2011年11月于武汉
前言
---------------------------深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)---------------------------
Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架(如Spring、MyBatis等)构成。在国内,有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虚拟机的资料却显得异常贫乏。
这种状况很大程度上是由Java开发技术本身的一个重要优点导致的:在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性。运行程序的物理机千差万别,而Java虚拟机则在千差万别的物理机上面建立了统一的运行平台,实现了在任意一台Java虚拟机上编译的程序,都能在任何其他Java虚拟机上正常运行。这一极大的优势使得Java应用的开发比传统C/C++应用的开发更高效快捷,程序员可以把主要精力放在具体业务逻辑,而不是放在保障物理硬件的兼容性上。通常情况下,一个程序员只要了解了必要的Java类库API、Java语法,学习适当的第三方开发框架,就已经基本满足日常开发的需要了。虚拟机会在用户不知不觉中完成对硬件平台的兼容及对内存等资源的管理工作。因此,了解虚拟机的运作并不是普通开发人员必备的,或者说首要学习的知识。
然而,凡事都具备两面性。随着Java技术的不断发展,它已被应用于越来越多的领域之中。其中一些领域,如互联网、能源、金融、通信等,对程序的性能、稳定性和扩展性方面会有极高的要求。一段程序很可能在10个人同时使用时完全正常,但是在10 000个人同时使用时就会缓慢、死锁甚至崩溃。毫无疑问,要满足10 000个人同时使用,需要更高性能的物理硬件,但是在绝大多数情况下,提升硬件性能无法等比例提升程序的运行性能和并发能力,甚至有可能对程序运行状况没有任何改善。这里面有Java虚拟机的原因:为了达到“所有硬件提供一致的虚拟平台”的目的,牺牲了一些硬件相关的性能特性。更重要的是人为原因:如果开发人员不了解虚拟机诸多技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。
其实,目前商用的高性能Java虚拟机都提供了相当多的优化参数和调节手段,用于满足应用程序在实际生产环境中对性能和稳定性的要求。如果只是为了入门学习,让程序在自己的机器上正常工作,那么这些特性可以说是可有可无的;但是,如果用于生产开发,尤其是大规模的、企业级的生产开发,就迫切需要开发人员中至少有一部分人对虚拟机的特性及调节方法具有很清晰的认识。所以在Java开发体系中,对架构师、系统调优师、高级程序员等角色的需求一直都非常大。学习虚拟机中各种自动运作特性的原理也成为Java程序员成长路上最终必然会接触到的一课。通过本书,读者可以以一个相对轻松的方式学到虚拟机的运作原理。
本书面向的读者
(1)使用Java技术体系的中、高级开发人员
Java虚拟机作为中、高级开发人员修炼的必要知识,有着较高的学习门槛,本书可作为学习虚拟机的教材。
(2)系统调优师
系统调优师是最近几年才兴起并迅速流行起来的职业,本书中的大量案例、代码和调优实战将会对系统调优师的日常工作有直接的参考作用。
(3)系统架构师
保障系统的性能、并发和伸缩等能力是系统架构师的主要职责之一,而这部分与虚拟机的运作密不可分,本书可以作为他们制定应用系统底层框架的参考资料。
如何阅读本书
本书一共分为五个部分:走近Java、自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分各个章节间则有先后顺序。
这里并没有假定所有读者都在Java领域具备特别专业的技术水平,因此会在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述虚拟机中与开发关系最为密切的内容。但是,本书毕竟是在探讨虚拟机的工作原理,不可避免地需要读者有一定的技术基础,而且本书的读者定位是中、高级程序员群体,对于一些常用的开发框架、Java类库API和Java语法等基础知识点,将假设读者已有所了解。
媒体评论
---------------------------深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)---------------------------
该书是国内近10年少见的原创计算机著作,它帮助国内数十万Java开发工程师和架构师加深了对JVM的认知,提升了Java水平,不可多得。
—— 陈斌易宝支付 CTO
当年看到本书的第1版时如获至宝,反复读了很多遍,让我对Java有了深入了解。书中内容深入浅出,原理和实践都讲得很透彻。第3版在内容上有很多更新,强烈推荐给所有技术从业者。
—— 张新波同盾科技联合创始人兼副总裁
本书是讲解JVM原理的经典著作,详细介绍了内存管理、多线程、编译过程、执行子系统、高并发优化等关键技术,第3版中新增了大量最新的Java技术,值得再仔细阅读。
—— 陈运文国家万人计划专家、达观数据CEO
JVM是Java的核心和基础,深入理解它,不仅有助于提升Java程序的性能,还能帮助我们更深入地理解底层语言的运行机制。希望本书能帮助更多Java工程师提升功力。
—— 郭炜易观国际CTO
本书对Java内核体系进行了系统梳理,详细讲解了Java中的关键组件和体系,如Java的内存管理、JVM系统的全局体系、性能调优、高并发等,让读者可以非常全面地了解JVM的运行机制和调优原理。
—— 罗李滴滴大数据架构部负责人、Apache Alluxio PMC&Committer
只有掌握JVM的原理,才能够在高并发、大容量和低延时的极端场景下做好架构和编码,这对程序员的要求极为严苛,本书为广大Java程序员和架构师提供了非常棒的指导。
—— 赵成蘑菇街技术总监
本书值得所有Java工程师仔细研读,在它的基础上再去深入挖掘,必定能对Java开发和相关系统的设计有真正的理解,完成从应用开发到系统设计的关键一步。
—— 张力柯腾讯游戏Turing Lab副总监
书摘
---------------------------Java并发编程实战---------------------------
版权页:
插图:
第一章简介
编写正确的程序很难,而编写正确的并发程序則难上加难。与串行程序相比,在并发程序中存在更多容易出错的地方。那么,为什么还要编写并发程序?线程是Java语言中不可或缺的重要功能,它们能使复杂的异步代码变得更简单,从而极大地简化了复杂系统的开发。此外,要想充分发挥多处理器系统的强大计算能力,最简单的方式就是使用线程。随着处理器数量的持续增长,如何高效地使用并发正变得越来越重要。
1.1 并发简史
在早期的计算机中不包含操作系统,它们从头到尾只执行一个程序,并且这个程序能访问计算机中的所有资源。在这种裸机环境中,不仅很难编写和运行程序,而且每次只能运行一个程序,这对于昂贵并且稀有的计算机资源来说也是一种浪费。
操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行:操作系统为各个独立执行的进程分配各种资源,包括内存,文件句柄以及安全证书等。如果需要的话,在不同的进程之间可以通过一些粗粒度的通信机制来交换数据,包括:套接字、信号处理器、共享内存、信号量以及文件等。
之所以在计算机中加入操作系统来实现多个程序的同时执行,主要是基于以下原因:
资源利用率。在某些情况下,程序必须等待某个外部操作执行完成,例如输入操作或输出操作等,而在等待时程序无法执行其他任何工作。因此,如果在等待的同时可以运行另一个程序,那么无疑将提高资源的利用率。
公平性。不同的用户和翠序对于计算机上的资源有着同等的使用权。一种高效的运行方式是通过粗粒度的时间分片(Time Slicing)使这些用户和程序能共享计算机资源,而不是由一个程序从头运行到尾,然后再启动下一个程序。
便利性。通常来说,在计算多个任务时,应该编写多个程序,每个程序执行一个任务并在必要时相互通信,这比只编写一个程序来计算所有任务更容易实现。