当前位置:首页 > > JVM电子书网盘下载
深入理解JVM&G1 GC 深入理解JVM&G1 GC
码农之家

码农之家 提供上传

资源
30
粉丝
50
喜欢
320
评论
1

    深入理解JVM&G1 GC PDF 原书扫描版

    JVM电子书
    • 发布时间:

    给大家带来的一篇关于JVM相关的电子书资源,介绍了关于JVM、G1、GC方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小203.5 MB,周明耀编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.9,更多相关的学习资源可以参阅ADO.NET3.5Python3.6自然语言获取所处位置RabbitMQ、等栏目。

  • 深入理解JVM&G1 GC PDF 下载
  • 下载地址:https://pan.baidu.com/s/1r5UZI_lZZ8Z5JLnqQlCI8
  • 提取码:rwi5
  • 读者评价

    看了下目录,内容对我很有吸引力,增长见识,开拓眼界,也弥补自己基础原理方面的短板。书中代码很多,也是作者说的本书的特色与优势,刚开始有些抵触,不过细看之后发现很多通过这些简短的代码能够更好更清晰的理解。另外本书今年7月第一版,内容和知识点都是针对当下的。在如今中国互联网技术飞速发展革新的时代,就应该多出新书供人参考学习。总的来说,这本书很喜欢,对我比较合适。新手就算了,不太适合。有两年之上经验的可以拿来参考学习。等读完了再来追评。

    国人写的有一本好书 作者对于JVM和GC都有非常深入的理解 尤其是G1 原理基本上说的非常清楚了 而且还有很多实用经验提供给读者 写作风格非常轻松 可以说是行云流水 不过里面有一些小例子举得算不上恰当 有些画蛇添足 也可能是地域文化的原因 比如北京人住四合院的例子 作为北京人 我是没理解之间有什么共同点的 总体来说 是一本值得细读的好书 感谢作者

    总的来说,本书对Java GC机制的分析深入浅出,是对大数据Java内存回收的优秀实践。读完茅塞顿开、受益匪浅。很多技术细节应用之后,对产品性能有明显提升。在此感谢周明耀的分享,希望他能够写出更多优秀的书籍。——华为南京研究所大数据产品部维护经理 吴骏

    每年都要面试很多学生,我感觉中国的大学不太注重实际项目开发能力的培养,较为教条,这也是我的系列丛书首先从Java技术开始的原因,它更加接地气。本书主要为学习Java语言的学生、初级程序员提供JVM和GC的使用和优化建议及经验,力求做到知识的综合传播,而不是仅仅针对Java虚拟机调优进行讲解。本书具体包括以下几方面:JVM基础知识、GC基础知识、G1 GC的深入介绍、G1 GC调优建议、JDK自带工具使用介绍等。——周明耀

    编辑推荐

    适读人群 :初、中级Java程序员、GC深入学习人员
    ★没有一招鲜似的调优秘籍或包罗万象的性能百科
    ★GC性能调优需要专门的知识技能才能解决
    ★解决的GC性能问题越多,技艺才会越精湛
    ★《深入理解JVM & G1 GC》不仅有技术实践,还有设计原理和目标
    ★让你深入掌握GC,积累更多技术与经验,
    ★更好地提升产品性能

    内容简介

    G1GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1GC代表了先进性。

    《深入理解JVM&G1GC》主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1GC。中国的软件开发行业已经有几十年了,从目前的行业发展来看,单纯的软件公司很难有发展,目前流行的云计算、物联网企业实际上是综合性IT技术的整合,这就需要有综合能力的程序员。《深入理解JVM&G1GC》作者力求做到知识的综合传播,而不是仅仅针对Java虚拟机和GC调优进行讲解,也力求每一章节都有实际的案例支撑。《深入理解JVM&G1GC》具体包括以下几方面:JVM基础知识、GC基础知识、G1GC的深入介绍、G1GC调优建议、JDK自带工具使用介绍等。

    通读《深入理解JVM&G1GC》后,读者可以深入了解G1GC性能调优的许多主题及相关的综合性知识。读者也可以把《深入理解JVM&G1GC》作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。

    内容节选

    java jvm的知识详细介绍

    java jvm 详解:

    关于jvm的相关知识

    一、堆内存和栈内存

    1、jvm中的栈内存主要存储的是基本类型的变量和对象的引用

    2、jvm中的堆内存主要存储的是用new来创建的对象和数组,可变长字符串(StringBuilder和StringBuffered)都是存储在堆内存的

    使用堆的优点是动态分配存储空间,更灵活,但缺点是由于要动态分配内存,所以存储速度较慢;而使用栈速度就比较快,也可以实现数据的共享,但缺点是栈中的数据大小和生存期是必须确定的,缺乏灵活性

    3、静态存储分配是存储静态变量和静态代码块的

    二、jvm的认识

    jvm即java虚拟机,它屏蔽了与具体操作系统平台相关的信息,使java程序只生成在java虚拟机上运行的目标代码(字节码),这样就可以实现跨平台运行;

    它的原理是:java源文件经过java编译器编译成字节码程序,通过jvm将每一条指令翻译成不同平台的机器码,通过特定的平台运行;

    jvm的内存区域主要分为:方法区,jvm栈,堆,本地方法栈,程序计数器

    程序计数器:用于记录当前执行到的那个指令,这是唯一一个没有oom情况的区域;

    jvm栈:线程私有,每个线程创建的同时都会创建jvm栈,它存放的是当前线程中局部的基本变量,部分返回结果以及stack frame,还有对象的引用地址;

    堆:线程共享,用来存储一些对象以及数组;既然共享,就需要加锁,所以导致开销大;

    方法区:这个方法区对应的是持久代,它存放的是类的信息(名称、修饰符等等)、类中的静态变量、类中用final定义的常量等等;

    本地方法栈:用来支持native方法的执行,用来储存每个native方法的调用状态;

    java垃圾回收主要是针对堆和方法区:堆分为新生代和老年代,一般刚刚new出来的对象都会被放入到新生代;而新生代又分为Eden区和两个Survivor区;

    垃圾回收的机制就是:首先判断出哪些对象是垃圾,即不再被使用,然后利用相应的算法(标记-清除算法、复制算法、标记-整理算法、分代收集算法)对垃圾进行回收;

    1、标记-清除算法:

    分两个阶段,标记阶段和清除阶段,首先标记出需要被回收的对象,然后再回收标记对象所占有的空间;

     

     它的实现比较简单,但是缺点就是容易产生内存碎片,导致后续需要为大对象分配空间时找不到足够的内存而提前触发一次新的垃圾回收动作;

    2、复制算法:

    复制算法为了解决标记-清除算法的缺点,它将内存按容量划分成大小相等的两块区域,每次只使用其中的一块;当一块用完了之后,就将还存活着的对象复制到另外一块区域,然后再把使用过的那一块区域清理掉,这样就不容易出现碎片;

    解决了内存碎片的问题,但是缺点是将使用的内存减少到了原来的一半,并且复制的效率跟存活下来的对象数量有关,当数量很大时,效率大大降低;

    3、标记-整理算法

    为了解决复制算法的缺陷,标记-整理算法诞生,标记阶段也跟标记-清除算法一样,先把需要回收的对象标记出来,但是它不是直接回收,而是将存活的对象都向另一边移动,然后清理掉边界以外的内存;

    4、分代收集算法

    这是目前用的最多的一个算法,它的核心思想是根据对象的存活周期将内存划分为若干个不同的区域,一般情况下将堆区划分为新生代和老年代,老年代的特点就是每次垃圾回收时需要回收的对象比较少,而新生代的就比较多,所以采取不一样的算法;

    目前新生代大部分采用的是复制算法,但实际上并不是按照1:1的比例来划分新生代的空间的,一般来说是将新生代划分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden空间和其中的一块Survivor空间,当进行回收时,将Eden和Survivor中还存活的对象复制到另一块Survivor空间中,然后清理掉Eden和刚才使用过的Survivor空间。

    而由于老年代的特点是每次回收都只回收少量对象,一般使用的是标记-整理(Mark-Compact)算法。

    注意,在堆区之外还有一个代就是永久代(Permanet Generation),它用来存储class类、常量、方法描述等。对永久代的回收主要回收两部分内容:废弃常量和无用的类。

    那么我们怎么确定什么对象是“垃圾”呢?

    方法一、引用计数法:

    在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。

    优点:实现简单,效率高

    缺点:无法解决循环引用的问题

    方法二、可达性分析法:

    该方法的基本思想是通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。

    哪些对象可以成为GC Roots呢?

    1.jvm栈(栈帧中的本地变量表)中引用的对象。
    2.方法区中类静态属性引用的对象。
    3.方法区中常量引用的对象
    4.本地方法栈中JNI(即一般说的Native方法)引用的对象。

    对于程序员来说,我们也可以通过一些方法来减少GC开销:

    1、不要显示地调用System.gc()方法

    2、尽量减少临时对象的使用

    3、对象不用的时候显示地设置为null

    4、尽量使用StringBuilder来代替String累加字符串

    5、能用基本类型的变量(int long),就不要用对象(Integer、Long)

    6、尽量少使用静态对象变量

     感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    目录

    • 序 VII
    • 前言 IX
    • 第1章 JVM & GC基础知识 1
    • 1.1 引言 2
    • 1.2 基本术语 3
    • 1.2.1 Java相关术语 4
    • 1.2.2 JVM/GC通用术语 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 Collection 92
    • 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)GC 106
    • 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 GC 167
    • 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 如何启动SA 217
    • 6.2.2 SA原理及使用介绍 222
    • 6.3 其他工具介绍 231
    • 6.3.1 GCHisto 231
    • 6.3.2 JConsole 232
    • 6.3.3 VisualVM 236
    • 6.4 本章小结 238

    上一篇:Ansible快速入门:技术原理与实战  下一篇:量化交易之路-用Python做股票量化分析

    展开 +

    收起 -

     
    JVM 相关内容
    《深入理解JVM&G1 GC》学习笔记

    Copyright 2018-2020 xz577.com 码农之家

    本站所有电子书资源不再提供下载地址,只分享来路

    免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

    版权投诉 / 书籍推广 / 赞助:QQ:520161757