登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入 新註冊 | 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / EMS,時效:出貨後2-3日

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

2023年12月出版新書

2023年11月出版新書

2023年10月出版新書

2023年09月出版新書

2023年08月出版新書

2023年07月出版新書

2023年06月出版新書

2023年05月出版新書

2023年04月出版新書

2023年03月出版新書

2023年02月出版新書

『簡體書』实战Java虚拟机———JVM故障诊断与性能优化 (第2版)

書城自編碼: 3382281
分類: 簡體書→大陸圖書→計算機/網絡程序設計
作者: 葛一鸣
國際書號(ISBN): 9787121367748
出版社: 电子工业出版社
出版日期: 2019-06-01


書度/開本: 16开 釘裝: 平塑勒

售價:NT$ 561

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
边界之外:海外社会研究(第一辑)
《 边界之外:海外社会研究(第一辑) 》

售價:NT$ 386.0
好销售,不违心:在你的舒适区内拿订单
《 好销售,不违心:在你的舒适区内拿订单 》

售價:NT$ 330.0
阿富汗史:骑驰在风暴中的国度
《 阿富汗史:骑驰在风暴中的国度 》

售價:NT$ 549.0
背影2
《 背影2 》

售價:NT$ 386.0
她的罪名
《 她的罪名 》

售價:NT$ 279.0
巨变与突围:碰撞中的清帝国:1644—1840
《 巨变与突围:碰撞中的清帝国:1644—1840 》

售價:NT$ 437.0
变态心理揭秘
《 变态心理揭秘 》

售價:NT$ 279.0
非洲三万里(2024版)
《 非洲三万里(2024版) 》

售價:NT$ 381.0

建議一齊購買:

+

NT$ 813
《 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) 》
+

NT$ 579
《 实战Java高并发程序设计(第2版) 》
+

NT$ 579
《 Java并发编程之美 》
+

NT$ 743
《 Spring 5核心原理与30个类手写实战 》
+

NT$ 929
《 揭秘Java虚拟机:JVM设计原理与实现 》
+

NT$ 624
《 漫画算法:小灰的算法之旅 》
編輯推薦:
★结构清晰。
采用从整体到局部的视角,每一章节对应单独的知识点,力求展示虚拟机的全貌。
★理论结合实战。
在每一个知识点后,都给出了演示示例供读者参考,帮助读者更好地消化
★专注专业。
对Java虚拟机的原理和实践做了丰富介绍,力求从多角度更专业地对JVM进行探讨。
★通俗易懂。
本书服务于广大虚拟机初学者,简单的白话文风格贯穿全书,使读者少盲点、无盲点。
★技术全面。
纵横Windows和Linux双系统下的性能诊断、涉及32位系统和64位系统的优化比较、贯穿从JDK 1.5到JDK 10的优化演进。
內容簡介:
不管技术如何发展,Java依然是一个充满活力的生态圈,学习Java的人也越来越多,但多数人学习Java虚拟机(JVM)时都会遇到瓶颈。本书将通过200余个示例详细介绍JVM中的各种参数配置、故障排查、性能监控及性能优化,帮助Java人突破瓶颈。本书共11章,修订后版本涵盖Java 6~Java 10。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心—Class文件结构,以及Java虚拟机中类的装载系统。第11章介绍了Java虚拟机的执行系统和字节码,并给出了通过ASM框架进行字节码注入的案例。本书不仅适合Java程序员阅读,还适合工作于Java虚拟机之上的研发人员、软件设计师、架构师阅读。
關於作者:
葛一鸣:炼数成金特约讲师,国家认证系统分析师,获得Oracle OCP认证。长期从事Java软件开发工作,对Java程序设计、JVM有深入研究,对设计模式、人工智能、神经网络、数据挖掘等技术有浓厚兴趣,著有《实战Java虚拟机》一书,目前在Dataguru开设多门课程,包括Java并发、JVM、Git等。
目錄
目录



第1章 初探Java虚拟机1

1.1知根知底:追溯Java的发展历程2

1.1.1那些依托Java虚拟机的语言大咖们2

1.1.2Java发展史上的里程碑2

1.2跨平台的真相:Java虚拟机做中介4

1.2.1理解Java虚拟机的原理4

1.2.2看清Java虚拟机的种类5

1.3一切看我的:Java语言规范6

1.3.1词法的定义6

1.3.2语法的定义7

1.3.3数据类型的定义8

1.3.4Java语言规范总结9

1.4一切听我的:Java虚拟机规范9

1.5数字编码就是计算机世界的水和电10

1.5.1整数在Java虚拟机中的表示10

1.5.2浮点数在Java虚拟机中的表示12

1.6抛砖引玉:编译和调试虚拟机14

1.7小结18

第2章 认识Java虚拟机的基本结构19

2.1谋全局者才能成大器:看穿Java虚拟机的架构19

2.2小参数能解决大问题:学会设置Java虚拟机的参数21

2.3对象去哪儿:辨清Java堆22

2.4函数如何调用:出入Java栈24

2.4.1局部变量表26

2.4.2操作数栈31

2.4.3帧数据区31

2.4.4栈上分配32

2.5类去哪儿了:识别方法区34

2.6小结36

第3章 常用Java虚拟机参数37

3.1一切运行都有迹可循:掌握跟踪调试参数37

3.1.1跟踪垃圾回收读懂虚拟机日志38

3.1.2类加载卸载的跟踪42

3.1.3查看系统参数45

3.2让性能飞起来:学习堆的配置参数45

3.2.1最大堆和初始堆的设置46

3.2.2新生代的配置49

3.2.3堆溢出处理53

3.3别让性能有缺口:了解非堆内存的参数配置54

3.3.1方法区配置55

3.3.2栈配置55

3.3.3直接内存配置55

3.4Client和Server二选一:虚拟机的工作模式58

3.5小结59

第4章 垃圾回收的概念与算法60

4.1内存管理清洁工:认识垃圾回收60

4.2清洁工具大PK:讨论常用的垃圾回收算法61

4.2.1引用计数法(Reference Counting)62

4.2.2标记清除法(Mark-Sweep)63

4.2.3复制算法(Copying)64

4.2.4标记压缩法(Mark-Compact)66

4.2.5分代算法(Generational Collecting)67

4.2.6分区算法(Region)68

4.3谁才是真正的垃圾:判断可触及性69

4.3.1对象的复活69

4.3.2引用和可触及性的强度71

4.3.3软引用可被回收的引用72

4.3.4弱引用发现即回收76

4.3.5虚引用对象回收跟踪77

4.4垃圾回收时的停顿现象:Stop-The-World案例实战79

4.5小结83

第5章 垃圾收集器和内存分配84

5.1一心一意一件事:串行回收器85

5.1.1新生代串行回收器85

5.1.2老年代串行回收器86

5.2人多力量大:并行回收器86

5.2.1新生代ParNew回收器87

5.2.2新生代ParallelGC回收器88

5.2.3老年代ParallelOldGC回收器89

5.3一心多用都不落下:CMS回收器(JDK 8及之前的版本)90

5.3.1CMS主要工作步骤90

5.3.2CMS主要的参数91

5.3.3CMS的日志分析93

5.3.4有关Class的回收94

5.4未来我做主:G1回收器(JDK 9及之后版本的默认回收器)95

5.4.1G1的内存划分和主要收集过程95

5.4.2G1的新生代GC96

5.4.3G1的并发标记周期97

5.4.4混合回收100

5.4.5必要时的Full GC102

5.4.6G1的日志102

5.4.7G1相关的参数106

5.5回眸:有关对象内存分配和回收的一些细节问题106

5.5.1禁用System.gc107

5.5.2System.gc使用并发回收107

5.5.3并行GC前额外触发的新生代GC109

5.5.4对象何时进入老年代109

5.5.5在TLAB上分配对象117

5.5.6finalize函数对垃圾回收的影响120

5.6温故又知新:常用的GC参数125

5.7动手才是真英雄:垃圾回收器对Tomcat性能影响的实验127

5.7.1配置实验环境127

5.7.2配置性能测试工具JMeter128

5.7.3配置Web应用服务器Tomcat131

5.7.4实战案例1初试串行回收器133

5.7.5实战案例2扩大堆以提升系统性能133

5.7.6实战案例3调整初始堆大小134

5.7.7实战案例4使用ParrellOldGC回收器135

5.7.8实战案例5使用较小堆提高GC压力135

5.7.9实战案例6测试ParallelOldGC的表现135

5.7.10实战案例7测试ParNew回收器的表现136

5.7.11实战案例8测试JDK 1.8的表现136

5.7.12实战案例9使用高版本虚拟机提升性能137

5.8小结137

第6章 性能监控工具138

6.1有我更高效:Linux下的性能监控工具139

6.1.1显示系统整体资源使用情况top命令139

6.1.2监控内存和CPUvmstat命令140

6.1.3监控IOiostat命令142

6.1.4多功能诊断器pidstat工具143

6.2用我更高效:Windows下的性能监控工具148

6.2.1任务管理器148

6.2.2perfmon性能监控工具150

6.2.3Process Explorer进程管理工具153

6.2.4pslist命令Windows下也有命令行工具155

6.3外科手术刀:JDK性能监控工具157

6.3.1查看Java进程jps命令158

6.3.2查看虚拟机运行时信息jstat命令159

6.3.3查看虚拟机参数jinfo命令162

6.3.4导出堆到文件jmap命令163

6.3.5JDK自带的堆分析工具jhat命令165

6.3.6查看线程堆栈jstack命令168

6.3.7远程主机信息收集jstatd命令171

6.3.8多功能命令行jcmd命令173

6.3.9性能统计工具hprof175

6.3.10扩展jps命令178

6.4我是你的眼:图形化虚拟机监控工具JConsole178

6.4.1JConsole连接Java程序179

6.4.2Java程序概况180

6.4.3内存监控180

6.4.4线程监控181

6.4.5类加载情况183

6.4.6虚拟机信息183

6.5一目了然:可视化性能监控工具Visual VM184

6.5.1Visual VM连接应用程序185

6.5.2监控应用程序概况186

6.5.3Thread Dump和分析187

6.5.4性能分析188

6.5.5内存快照分析190

6.5.6BTrace介绍191

6.6来自JRockit的礼物:虚拟机诊断工具Mission Control199

6.6.1MBean服务器199

6.6.2飞行记录器(Flight Recorder)201

6.7小结204

第7章 分析Java堆205

7.1对症才能下药:找到内存溢出的原因206

7.1.1堆溢出206

7.1.2直接内存溢出206

7.1.3过多线程导致OOM208

7.1.4永久区溢出210

7.1.5GC效率低下引起的OOM211

7.2无处不在的字符串:String在虚拟机中的实现211

7.2.1String对象的特点211

7.2.2有关String的内存泄漏213

7.2.3有关String常量池的位置216

7.3虚拟机也有内窥镜:使用MAT分析Java堆218

7.3.1初识MAT218

7.3.2浅堆和深堆221

7.3.3MAT堆分析案例解析222

7.3.4支配树(Dominator Tree)226

7.3.5Tomcat堆溢出分析227

7.4筛选堆对象:MAT对OQL的支持231

7.4.1Select子句231

7.4.2From子句233

7.4.3Where子句235

7.4.4内置对象与方法235

7.5更精彩的查找:Visual VM对OQL的支持240

7.5.1Visual VM的OQL基本语法240

7.5.2内置heap对象241

7.5.3对象函数243

7.5.4集合统计函数247

7.5.5程序化OQL分析Tomcat堆253

7.6小结256

第8章 锁与并发257

8.1安全就是锁存在的理由:锁的基本概念和实现258

8.1.1理解线程安全258

8.1.2对象头和锁260

8.2避免残酷的竞争:锁在Java虚拟机中的实现和优化261

8.2.1偏向锁261

8.2.2轻量级锁263

8.2.3锁膨胀264

8.2.4自旋锁265

8.2.5锁消除265

8.3应对残酷的竞争:锁在应用层的优化思路267

8.3.1减少锁持有时间267

8.3.2减小锁粒度268

8.3.3锁分离270

8.3.4锁粗化272

8.4无招胜有招:无锁274

8.4.1理解CAS274

8.4.2原子操作275

8.4.3新宠儿LongAdder278

8.5将随机变为可控:理解Java内存模型281

8.5.1原子性281

8.5.2有序性283

8.5.3可见性285

8.5.4Happens-Before原则287

8.6小结287

第9章 Class文件结构288

9.1不仅跨平台,还能跨语言:语言无关性288

9.2虚拟机的基石:Class文件290

9.2.1Class文件的标志魔数291

9.2.2Class文件的版本293

9.2.3存放所有常数常量池294

9.2.4Class的访问标记(Access Flag)301

9.2.5当前类、父类和接口302

9.2.6Class文件的字段303

9.2.7Class文件的方法基本结构305

9.2.8方法的执行主体Code属性307

9.2.9记录行号LineNumberTable属性308

9.2.10保存局部变量和参数LocalVariableTable属性309

9.2.11加快字节码校验StackMapTable属性309

9.2.12Code属性总结314

9.2.13抛出异常Exceptions属性315

9.2.14用实例分析Class的方法结构316

9.2.15我来自哪里SourceFile属性319

9.2.16强大的动态调用BootstrapMethods属性320

9.2.17内部类InnerClasses属性321

9.2.18将要废弃的通知Deprecated属性322

9.2.19Class文件总结323

9.3操作字节码:走进ASM323

9.3.1ASM体系结构323

9.3.2ASM之Hello World325

9.4小结326

第10章 Class装载系统327

10.1来
內容試閱
关于Java生态圈
Java是目前应用最广泛的软件开发平台之一。随着Java及Java社区的不断壮大,Java也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。
作为一个平台,Java虚拟机扮演着举足轻重的作用。除了Java语言,任何一种能够被编译成字节码的计算机语言都属于Java这个平台。Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分,它们依赖于Java虚拟机,同时,Java平台也因为它们变得更加丰富多彩。
作为一种文化,Java几乎成了开源的代名词。在Java程序中,有着数不清的开源软件和框架,如Tomcat、Struts、Hibernate、Spring等。就连JDK和JVM自身也有不少开源的实现,如OpenJDK、Harmony。可以说,共享的精神在Java世界里体现得淋漓尽致。
作为一个社区,Java拥有无数的开发人员,有数不清的论坛和资料。从桌面应用软件、嵌入式开发到企业级应用、后台服务器、中间件,都可以看到Java的身影。其应用形式之复杂、参与人数之众多也令人咋舌。可以说,Java社区俨然已经成为一个良好而庞大的生态系统,而本书,将主要介绍这个生态系统的核心Java虚拟机。
第2版的重点修订
作者希望本书第2版的内容能够涵盖JDK 7~JDK 10,所以特做如下修订:
?JDK 10 源码环境的下载与搭建。
?JDK 10 JVM的调试方法介绍。
?JDK 10 运行参数的演变。
?JDK 10用G1垃圾回收器替代CMS垃圾回收器,成为默认的垃圾回收器。
?JDK 10调试工具的更新,废除功能类似的调试工具,重点推荐使用Visual VM。
本书的体系结构
本书立足于实际开发,又不缺乏理论介绍,力求通俗易懂、循序渐进。全书共分为11章。
第1章综述,介绍了Java虚拟机的概念、定义,讲解了Java语言规范和Java虚拟机规范,最后还介绍了OpenJDK的调试方法。
第2章介绍了Java虚拟机的总体架构,说明了堆、栈、方法区等内存空间的作用和彼此之间的联系。
第3章介绍了Java虚拟机的常用配置参数,重点对垃圾回收跟踪参数、内存配置参数做了详细介绍,并给出了案例说明。
第4章从理论层面介绍了垃圾回收的算法,如引用计数、标记清除、标记压缩、复制算法等。本章是第5章的理论基础。
第5章基于垃圾回收的理论知识,进一步详细介绍了Java虚拟机中实际使用的各种垃圾回收器,包括串行回收器、并行回收器、CMS、G1等。
第6章介绍了Java虚拟机的性能监控和故障诊断工具,考虑到实用性,也介绍了系统级性能监控工具的使用,两者结合,可以更好地帮助读者处理实际问题。
第7章详细介绍了对Java堆的分析方法和案例,主要讲解了MAT和Visual VM两款工具的使用,以及各自OQL的编写方式。
第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。本章不仅介绍了虚拟机内部锁的实现、优化机制,也给出了Java语言层面的一些锁优化思路,最后还介绍了无锁的并行控制方法。
第9章介绍了Java虚拟机的核心Class文件结构,Class文件作为Java虚拟机的基石,有着举足轻重的作用,对深入理解Java虚拟机有着不可忽视的作用。
第10章介绍了Java虚拟机中类的装载系统,其中着重介绍了Java虚拟机中ClassLoader的实现及设计模式。
第11章介绍了Java虚拟机的执行系统和字节码。为了帮助读者更快、更好地理解Java字节码,本章对字节码进行了分类讲解,并且理论联系实际,给出了通过ASM框架进行字节码注入的案例。
本书特色
本书的主要特点有:
?结构清晰。本书采用从整体到局部的视角,首先,第1、2章介绍了Java虚拟机的整体概况和结构。接着步步为营,每一章节对应单独的知识点,力求展示虚拟机的全貌。
?理论结合实战。本书不甘心于简单地枚举理论知识,在每一个理论背后,都给出了演示示例供读者参考,帮助读者更好地消化这些理论。比如,在对Class文件结构和字节码的介绍中,不仅仅简单地给出了理论说明,更是使用ASM框架将这些理论应用于实践,尽可能地做到理论与实践结合。
?专注专业。本书着眼于Java虚拟机,对Java虚拟机的原理和实践做了丰富的介绍,包括但不限于体系结构、虚拟机的调试方式、常用参数、垃圾回收系统、Class文件结构、执行系统等,力求从多角度更专业地对Java虚拟机进行探讨。
?通俗易懂。本书依然服务于广大虚拟机初学者,尽量避免采用过于理论化的描述方式,简单的白话文风格贯穿全书,尽量使读者在阅读过程中少盲点、无盲点。
?技术全面。纵横Windows和Linux双系统下的性能诊断、涉及32位系统和64位系统的优化比较、贯穿从JDK 1.5到JDK 10的优化演进。
适合阅读人群
虽然本书讲解力求通俗,但要通读本书并取得良好的学习效果,要求读者需要具备基本的Java知识或者一定的编程经验。因此,本书适合以下读者:
?拥有一定开发经验的Java平台开发人员(Java、Scala、JRuby等)。
?软件设计师、架构师。
?系统调优人员。
?有一定的Java编程基础并希望进一步理解Java的程序员。
?虚拟机爱好者,JVM实践者。
本书的约定
本书在叙述过程中,有如下约定:
?本书中所述的JDK 1.5、JDK 1.6、JDK 1.7、JDK 1.8、JDK 1.9、JDK 1.10等同于JDK 5、JDK 6、JDK 7、JDK 8、JDK 9、JDK 10。
?如无特殊说明,Java虚拟机均指HotSpot虚拟机。
?如无特殊说明,本书的程序、示例均在JDK 7~JDK 10环境中运行。
联系作者
本书的写作过程远比想象的艰辛,为了让全书能够更清楚、更正确地表达和论述,我经历了好多个不眠之夜,即使现在回想起来,也忍不住会打个寒战。由于写作水平的限制,书中难免会有不妥之处,望读者谅解。
为此,如果读者有任何疑问或者建议,非常欢迎大家加入QQ群254693571,一起探讨学习中的困难、分享学习的经验,我期待与大家一起交流、共同进步。同时,也希望大家可以关注我的博客http:www.uucode.net。
感谢
这本书能够面世,是因为得到了众人的支持。首先,要感谢我的妻子,她始终不辞辛劳,毫无怨言地对我照顾有加,才让我得以腾出大量时间,并可以安心工作。其次,要感谢编辑为我一次又一次地审稿改错、批评指正,才让本书逐步完善。最后,感谢我的母亲30年如一日对我的体贴和关心。
特别感谢网友千马奕在JDK 1.9、JDK1.10下对本书所做的测试和修订。
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),您即可享受以下服务:
?下载资源:本书如提供示例代码及资源文件,均可在 下载资源 处下载。
?提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
?与作者交流:在页面下方 读者评论 处留下您的疑问或观点,与作者和其他读者一同学习交流。
页面入口:http:www.broadview.com.cn36774

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 海外用户
megBook.com.tw
Copyright (C) 2013 - 2024 (香港)大書城有限公司 All Rights Reserved.