登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入   新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書

『簡體書』深入理解JVM & G1 GC

書城自編碼: 3007779
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: 周明耀
國際書號(ISBN): 9787121314681
出版社: 电子工业出版社
出版日期: 2017-06-01
版次: 1 印次: 1
頁數/字數: 248/
書度/開本: 128开 釘裝: 平塑勒

售價:HK$ 100.1

我要買

share:

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


新書推薦:
梦醒子:一位华北乡居者的人生(1857—1942))(第2版)
《 梦醒子:一位华北乡居者的人生(1857—1942))(第2版) 》

售價:HK$ 74.8
啊哈!原来如此(中译本修订版)
《 啊哈!原来如此(中译本修订版) 》

售價:HK$ 63.8
部分识别入门——计量经济学的创新性方法
《 部分识别入门——计量经济学的创新性方法 》

售價:HK$ 75.9
东野圭吾:变身(来一场真正的烧脑  如果移植了别人的脑子,那是否还是我自己)
《 东野圭吾:变身(来一场真正的烧脑 如果移植了别人的脑子,那是否还是我自己) 》

售價:HK$ 64.9
推荐连接万物
《 推荐连接万物 》

售價:HK$ 63.8
严复与福泽谕吉启蒙思想比较(王中江著作系列)
《 严复与福泽谕吉启蒙思想比较(王中江著作系列) 》

售價:HK$ 165.0
甘于平凡的勇气
《 甘于平凡的勇气 》

售價:HK$ 49.5
存在与结构:精神分析的法国转向——以拉康与萨特为中心
《 存在与结构:精神分析的法国转向——以拉康与萨特为中心 》

售價:HK$ 52.8

 

建議一齊購買:

+

HK$ 71.1
《Lua设计与实现》
+

HK$ 129.1
《图解Java多线程设计模式》
+

HK$ 114.6
《数学与泛型编程:高效编程的奥秘》
+

HK$ 79.8
《编程风格:好代码的逻辑》
+

HK$ 229.1
《奔跑吧 Linux内核》
+

HK$ 79.8
《程序员的算法趣题》
編輯推薦:
★没有一招鲜似的调优秘籍或包罗万象的性能百科
★GC性能调优需要专门的知识技能才能解决
★解决的GC性能问题越多,技艺才会越精湛
★《深入理解JVM & G1 GC》不仅有技术实践,还有设计原理和目标
★让你深入掌握GC,积累更多技术与经验,
★更好地提升产品性能
內容簡介:
G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。本书主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC。中国的软件开发行业已经有几十年了,从目前的行业发展来看,单纯的软件公司很难有发展,目前流行的云计算、物联网企业实际上是综合性IT技术的整合,这就需要有综合能力的程序员。本书作者力求做到知识的综合传播,而不是仅仅针对Java虚拟机和GC调优进行讲解,也力求每一章节都有实际的案例支撑。本书具体包括以下几方面:JVM基础知识、GC基础知识、G1 GC的深入介绍、G1 GC调优建议、JDK自带工具使用介绍等。通读本书后,读者可以深入了解G1 GC性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。
關於作者:
★周明耀

12年投资银行项目、分布式计算项目工作经验,IBM开发者论坛专栏作者、InfoQ专栏作者。

一名IT技术狂热爱好者,一名顽强到底的工程师。推崇技术创新、思维创新,对于新技术非常热爱,致力于技术研发、研究,通过发布文章、书籍、互动活动的形式积极推广软件技术。

欢迎添加微信michael_tec,共同探讨IT技术话题。
目錄
目录
序VII
前言IX
第1章 JVM & GC基础知识1
1.1 引言2
1.2 基本术语3
1.2.1 Java相关术语4
1.2.2 JVMGC通用术语24
1.2.3 G1涉及术语56
1.3 本章小结62

第2章 JVM & GC深入知识63
2.1 Java虚拟机内存模型64
2.1.1 程序计数器65
2.1.2 虚拟机栈66
2.1.3 本地方法栈72
2.1.4 Java堆73
2.1.5 方法区79
2.2 垃圾收集算法82
2.2.1 引用计数法82
2.2.2 根搜索算法83
2.2.3 标记-清除算法(Mark-Sweep)85
2.2.4 复制算法(Copying)87
2.2.5 标记-压缩算法(Mark-Compact)89
2.2.6 增量算法(Incremental Collecting)90
2.2.7 分代收集算法(Generational Collecting)91
2.3 Garbage Collection92
2.3.1 GC概念92
2.3.2 垃圾收集器分类93
2.3.3 Serial收集器94
2.3.4 ParNew收集器96
2.3.5 Parallel收集器99
2.3.6 CMS收集器102
2.3.7 Garbage First(G1)GC106
2.4 常见问题解析112
2.4.1 jmap -heap或-histo不能用112
2.4.2 YGC越来越慢112
2.4.3 Java永久代去哪儿了114
2.5 本章小结116

第3章 G1 GC应用示例117
3.1 范例程序118
3.2 选项解释及应用124
3.3 本章小结166

第4章 深入G1 GC167
4.1 G1 GC概念简述168
4.1.1 背景知识168
4.1.2 G1的垃圾回收机制169
4.1.3 G1的区间设计灵感169
4.2 G1 GC分代管理172
4.2.1 年轻代172
4.2.2 年轻代回收暂停173
4.2.3 大对象区间174
4.2.4 混合回收暂停176
4.2.5 回收集合及其重要性178
4.2.6 RSet及其重要性178
4.2.7 并行标记循环182
4.2.8 评估失败和完全回收186
4.3 G1 GC使用场景186
4.4 G1 GC论文原文翻译(部分)187
4.4.1 开题187
4.4.2 数据结构机制188
4.4.3 未来展望190
4.5 本章小结191

第5章 G1 GC性能优化方案192
5.1 G1的年轻代回收193
5.2 年轻代优化203
5.3 并行标记阶段优化205
5.4 混合回收阶段207
5.4.1 初步介绍207
5.4.2 深入介绍208
5.5 如何避免出现GC失败210
5.6 引用处理211
5.6.1 观察引用处理212
5.6.2 引用处理优化213
5.7 本章小结214

第6章 JVM诊断工具使用介绍215
6.1 SA基础介绍216
6.2 SA工具使用实践217
6.2.1 如何启动SA217
6.2.2 SA原理及使用介绍222
6.3 其他工具介绍231
6.3.1 GCHisto231
6.3.2 JConsole232
6.3.3 VisualVM236
6.4 本章小结238
內容試閱
★序
这是我第一次为人写序,心中不免忐忑,引用余光中先生对于写序的感受:我为人写序,于人为略而于文为详,用意也无非要就文本去探人本,亦即其艺术人格;自问与中国传统的序跋并不相悖,但手段毕竟不同了。周明耀的书追求的是人本,我则尽力而为。
周明耀是我以前的同事,我们是认识十多年的朋友,同时我也是他婚礼的伴郎,见证了他的一步步成长。周明耀无论对工作、技术,或者社会生活,都有着自己独特的见解。他始终对技术充满了敬畏之心,学无止境,并付诸实践。因此,才有了这本书。
以我对GC的理解,想要学习GC,首先需要理解为什么需要GC。随着应用程序所应对的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。正如周明耀在文中描述的,HotSpot有这么多的垃圾回收器(SerialGC、ParallelGC、ConcurrentMarkSweepGC),为什么还要发布GarbageFirst(G1)GC?原因就是这个。
当今的商业模式,更多依赖市场的力量,不断淘汰旧的行业,把有限的资源让给那些竞争力更强、利润率更高的企业。类似地,硅谷也在不断淘汰过时的人员,从全世界吸收新鲜血液。经过半个多世纪的发展,在硅谷地区形成了只有卓越才能生存的文化理念。本着这样的理念,GC承担了淘汰垃圾、保存优良资产的任务。正如周明耀所说,随着G1GC的出现,GC从传统的连续堆内存布局设计,逐渐走向不连续内存块,这是通过引入Region概念实现的,也就是说,由一堆不连续的Region组成了堆内存。其实也不能说是不连续的,只是它从传统的物理连续逐渐变为逻辑上的连续,这是通过Region的动态分配方式实现的,我们可以把一个Region分配给Eden、Survivor、老年代、大对象区间、空闲区间中的任意一个,而不是固定它的作用,因为越是固定,越是呆板。
总的来说,本书对JavaGC机制的分析深入浅出,是对大数据Java内存回收的优秀实践。读完茅塞顿开、受益匪浅。很多技术细节应用之后,对产品性能有明显提升。在此感谢周明耀的分享,希望他能够写出更多优秀的书籍。
华为南京研究所大数据产品部维护经理吴骏
★前言
7岁那年,当我合上《上下五千年》一套三册全书时,我对自己说,我想当个作家。这一晃27年了,等待了27年,我的第一本书《大话Java性能优化》在2016年4月正式面世,2016年8月第二次印刷,感谢读者的厚爱。第一次印刷时出现一些错别字,请原谅编辑小姑娘,99万字对她来说确实太多了,这是我的责任,未来一定尽全力避免。《深入理解JVM&G1GC》是我的第二本书,也即将面世。对于我的每一本书,我都怀着忐忑、惊喜的心情,就像第一次面对我的女儿小顽子,给她取这个小名,是希望她顽强到底,因为我相信,你若顽强到底,一切皆有可能。
我喜欢看书,每年购买的书接近100本,也喜欢技术积累。一直没有出书的想法,直到遇到了电子工业出版社的董老师,在深圳南湖的一席畅谈后,我决定做一位业余的技术作家,致力于中国软件开发行业的技术推广、普及、推动。
每年都要面试很多学生,我感觉中国的大学不太注重实际项目开发能力的培养,较为教条,这也是我的系统丛书首先从Java技术开始的原因,它更加接地气。本书主要为学习Java语言的学生、初级程序员提供JVM和GC的使用和优化建议及经验,力求做到知识的综合传播,而不是仅仅针对Java虚拟机调优进行讲解。本书具体包括以下几方面:JVM基础知识、GC基础知识、G1GC的深入介绍、G1GC调优建议、JDK自带工具使用介绍等。
本书基于JDK8,总的来说,没有一招鲜式的性能调优秘籍或包罗万象的性能百科,能让你摇身一变成为老练的GC性能调优专家。相当数量的GC性能问题还需要专门的知识技能才能解决。性能调优在很大程度上是一门艺术。解决的GC性能问题越多,技艺才会越精湛。我们不只要关心GC的持续演进,也要积极地去了解它的设计原理和设计目标。
最后,自我介绍一下,我叫周明耀,研究生学历,12年工作经验,IBM开发者论坛专家作者。我是一名IT技术狂热爱好者,一名九三学社社员,一名顽强到底的工程师。我推崇技术创新、思维创新,对于新技术非常的热爱。
感谢我的家人,和谐的家庭帮助我完成了这本书。我的妻子,她美丽、细心、博学、偶尔不那么温柔,但是我很爱她。我的小顽子,她天生性格很像我,希望她能够踏踏实实做人,保持创新精神,平平安安、健健康康地生活下去。感谢我妻子的父母、我的父母,他们帮我照顾小孩,我才有时间编写此书。感谢浙江省特级教师、杭州高级化学老师郑克良老师,郑老师的一句永远不要放弃,推动着我多年的发展。感谢数学老师张老师在公开场合对我智商的褒奖,第一次收获这样的赞赏,对我这样内向的孩子是多么的重要,谢谢。
这本书献给我记忆中的爷爷奶奶、外公外婆,你们给我的都是最美的回忆。
我相信这本书不是终点,它是麦克叔叔此生一系列技术书籍的一员,咱们下一本书见。


2.2.1 引用计数法

引用计数法(Reference Counting)在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。

引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。也就是说,引用计数器的实现只需要为每个对象配置一个整形的计数器即可。引用计数器算法的一大优势就是不用等待内存不够用的时候,才进行垃圾的回收,完全可以在赋值操作的同时检查计数器是否为0,如果是的话就可以立即回收。

但是引用计数器有一个严重的问题,即无法处理循环引用的情况。一个简单的循环引用问题的描述如下:有对象A和对象B,对象A中含有对象B的引用,对象B中含有对象A的引用。此时,对象A和对象B的引用计数器都不为0,但是在系统中却不存在任何第3个对象引用了A或B。也就是说,A和B是应该被回收的垃圾对象,但由于垃圾对象间相互引用,从而使垃圾回收器无法识别,引起内存泄漏。

如图2-6所示,构造了一个列表,将最后一个元素的next属性指向第一个元素,即引用第一个元素,从而构成循环引用。这个时候如果将列表的头head赋值为null,此时列表的各个元素的计数器都不为0,同时也失去了对列表的引用控制,从而导致列表元素不能被回收。

引用计数器拥有一些特性,首先它需要单独的字段存储计数器,这样的做法增加了存储空间的开销。其次,每次赋值都需要更新计数器,这增加了时间开销。再者,垃圾对象便于辨识,只要计数器为0,就可作为垃圾回收。接下来它能方便及时地回收垃圾,没有延迟性。最后不能解决循环引用的问题。正是由于最后一条致命缺陷,导致在Java的垃圾回收器中没有使用这类算法。

2.2.2 根搜索算法

HotSpot和大部分JVM都是使用根搜索算法作为垃圾标记的算法实现。前面介绍过的引用计数算法尽管实现简单,执行效率也不错,但是该算法本身却存在一个较大的弊端,甚至会影响到垃圾标记的准确性。由于引用计数算法会为程序中的每一个对象都创建一个私有的引用计数器,当目标对象被其他存活对象引用时,引用计数器中的值则会加1,不再引用时便会减1,当引用计数器中的值为0的时候,就意味着该对象已经不再被任何存活对象引用,可以被标记为垃圾对象。采用这种方式看起来似乎没有任何问题,但是如果一些明显已经死亡了的对象尽管没有被任何的存活对象引用,但是它们彼此之间却存在相互引用时,引用计数器中的值则永远不会为0,这样便会导致GC在执行内存回收时永远无法释放掉这种无用对象所占用的内存空间,极有可能引发内存泄漏。

相对于引用计数算法而言,根搜索算法不仅同样具备实现简单和执行高效等特点,更重要的是该算法可以有效地解决在引用计数算法中一些已经死亡的对象因相互引用而导致的无法正确被标记的问题,防止内存泄漏的发生。简单来说,根搜索算法是以根对象集合为起始点,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达(使用根搜索算法后,内存中的存活对象都会被根对象集合直接或间接连接着),如果目标对象不可达,就意味着该对象已经死亡,便可以在instanceOopDesc[ HotSpot在C代码中用instanceOopDesc类来表示Java对象,而该类继承oopDesc,所以HotSpot中的Java对象也自然拥有oopDesc所声明的头部。]的Mark World中将其标记为垃圾对象。在根搜索算法中,只有能够被根对象集合直接或者间接连接的对象才是存活对象。在HotSpot中,根对象集合中包含了5个元素,Java栈内的对象引用、本地方法栈内的对象引用、运行时常量池中的对象引用、方法区中类静态属性的对象引用以及与一个类对应的唯一数据类型的Class对象。

 

 

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