导航:首页 > 源码编译 > 什么书籍介绍了垃圾收集算法

什么书籍介绍了垃圾收集算法

发布时间:2022-06-27 23:47:03

java 技术:jvm垃圾回收机制有哪些

深入理解Java虚拟机:JVM高级特性与最佳实践

在《深入理解Java虚拟机:JVM高级特性与最佳实践》,介绍了几种垃圾回收算法

和HotSpot虚拟机中的7种垃圾收集器:

㈡ JAVA垃圾收集的算法是怎么样的

Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾收集算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。 (课课家教育)

大多数垃圾回收算法使用了根集(root set)这个概念;所谓根集就量正在执行的Java程序可以访问的引用变量的集合(包括局部变量、参数、类变量),程序可以使用引用变量访问对象的属性和调用对象的方法。垃圾收集首选需要确定从根开始哪些是可达的和哪些是不可达的,从根集可达的对象都是活动对象,它们不能作为垃圾被回收,这也包括从根集间接可达的对象。而根集通过任意路径不可达的对象符合垃圾收集的条件,应该被回收。下面介绍几个常用的算法。

1、 引用计数法(Reference Counting Collector)

引用计数法是唯一没有使用根集的垃圾回收的法,该算法使用引用计数器来区分存活对象和不再使用的对象。一般来说,堆中的每个对象对应一个引用计数器。当每一次创建一个对象并赋给一个变量时,引用计数器置为1。当对象被赋给任意变量时,引用计数器每次加1当对象出了作用域后(该对象丢弃不再使用),引用计数器减1,一旦引用计数器为0,对象就满足了垃圾收集的条件。

基于引用计数器的垃圾收集器运行较快,不会长时间中断程序执行,适宜地必须 实时运行的程序。但引用计数器增加了程序执行的开销,因为每次对象赋给新的变量,计数器加1,而每次现有对象出了作用域生,计数器减1。

2、tracing算法(Tracing Collector)

tracing算法是为了解决引用计数法的问题而提出,它使用了根集的概念。基于tracing算法的垃圾收集器从根集开始扫描,识别出哪些对象可达,哪些对象不可达,并用某种方式标记可达对象,例如对每个可达对象设置一个或多个位。在扫描识别过程中,基于tracing算法的垃圾收集也称为标记和清除(mark-and-sweep)垃圾收集器.

3、compacting算法(Compacting Collector)

为了解决堆碎片问题,基于tracing的垃圾回收吸收了Compacting算法的思想,在清除的过程中,算法将所有的对象移到堆的一端,堆的另一端就变成了一个相邻的空闲内存区,收集器会对它移动的所有对象的所有引用进行更新,使得这些引用在新的位置能识别原来 的对象。在基于Compacting算法的收集器的实现中,一般增加句柄和句柄表。

4、ing算法(Coping Collector)

该算法的提出是为了克服句柄的开销和解决堆碎片的垃圾回收。它开始时把堆分成 一个对象 面和多个空闲面, 程序从对象面为对象分配空间,当对象满了,基于coping算法的垃圾 收集就从根集中扫描活动对象,并将每个 活动对象复制到空闲面(使得活动对象所占的内存之间没有空闲洞),这样空闲面变成了对象面,原来的对象面变成了空闲面,程序会在新的对象面中分配内存。

一种典型的基于coping算法的垃圾回收是stop-and-算法,它将堆分成对象面和空闲区域面,在对象面与空闲区域面的切换过程中,程序暂停执行。

5、generation算法(Generational Collector)

stop-and-垃圾收集器的一个缺陷是收集器必须复制所有的活动对象,这增加了程序等待时间,这是coping算法低效的原因。在程序设计中有这样的规律:多数对象存在的时间比较短,少数的存在时间比较长。因此,generation算法将堆分成两个或多个,每个子堆作为对象的一代(generation)。由于多数对象存在的时间比较短,随着程序丢弃不使用的对象,垃圾收集器将从最年轻的子堆中收集这些对象。在分代式的垃圾收集器运行后,上次运行存活下来的对象移到下一最高代的子堆中,由于老一代的子堆不会经常被回收,因而节省了时间。

6、adaptive算法(Adaptive Collector)

在特定的情况下,一些垃圾收集算法会优于其它算法。基于Adaptive算法的垃圾收集器就是监控当前堆的使用情况,并将选择适当算法的垃圾收集器。

㈢ 如何评价《垃圾回收的算法与实现》及其作者中村成洋

要说读得不过瘾的地方,那就是算法篇中对GC知识的系统性把握还是不如《The Garbage Collection Handbook》;而实现篇中剖析的对象从现在的角度看版本偏老,而且有些系统实现得复杂的地方被略过了(例如分析Rubinius的GC时只分析了young gen的ing GC,而没有分析old gen的Immix GC),读完真恨不得给它加几个小章节…
但即便如此,这本书既授人以鱼,也授人以渔,读者了解了分析代码的思路后,结合算法篇里对领域的介绍,要去阅读其它GC实现的源码也就会有头绪了。所以那些缺失的源码剖析,就算是留给读者的习题吧

㈣ Java基础的书有哪些比较好的

书籍的话你可以看看以下几本书,从java入门到精通:

1.零基础入门《零基础学Java》

推荐理由简单易懂、而且还有配套视频教程,写、记都方便。


2、Head First Java

《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。此书是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最重要的,你会学会如何像个面向对象开发者一样去思考。

而且不只是读死书,你还会玩游戏、拼图、解谜题以及以意想不到的方式与Java交互。在这些活动中,你会写出一堆真正的Java程序,包括了一个船舰炮战游戏和一个网络聊天程序。

Head First系列的图文并茂学习方式能让你快速地在脑海中掌握住知识。敞开心胸准备好学习这些关键性的主题:

*Java程序语言

*面向对象程序开发

*Swing图形化接口

*使用Java API函数库

*编写、测试与布署应用程序

*处理异常

*多线程

*网络程序设计

*集合与泛型



3、Effective java 中文版(第2版)

领导开发Java集合框架和并发API包的 约书亚·布洛克 大神所着。

本书适合于有着数年开发经验Java程序员,通过本书我们可以很多编程中的最佳实践,并且可以从JDK贡献者布洛克大神这里汲取经验。Effective Java从质量,内容和问题解答方式上来说都是一本评价很高的书,因此读这本书会是一种感觉很棒的体验。另外本书的章节相对比较轻量,与其他章节耦合度较低,因此在旅行或者闲暇时间阅读也是可以的。在内容方面,Effective Java包含了从静态工厂,序列化,equals和hashcode到泛型,枚举,可变参数以及反射的最佳解决方法。本书对Java各方面知识点的讲解会让你受益匪浅。



4、《Java 编程思想》

是个大部头,足足 880 页,文字更是密密麻麻。我不建议大家一个字一个字的读,知晓其中的精华就可以了。

本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。

从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。



5、Java Web高级编程


Java成为世界上编程语言之一是有其优势的。熟悉JavaSE的程序员可以轻松地进入到Java EE开发中,构建出安全、可靠和具有扩展性的企业级应用程序。编写《Java Web高级编程——涵盖WebSockets、Spring Framework、JPA Hibernate和Spring Security》一书的目的正是如此。

《Java Web高级编程:涵盖WebSockets、Spring Framework、JPA 》面向的读者是已经了解Java SE、SQL和基本的HTML,准备将他们的Java编码技能提升到更高水平的程序员。软件开发者可以按顺序阅读本书或者在遇到特定的编程问题时将某个章节用作参考。

主要内容

◆ 为企业级Web应用的Java编码提供了自我指导、自我学习的方法

◆ 帮助Web应用架构师在开发团队的项目中或者开发过程中应用新的概念

◆ 对Java EE平台7和其中的许多技术提供了详细的介绍

◆ 讲解了Servlet、JSP、WebSockets、Spring Framework、AMQP、JPA和O/RM、Spring Data、全文搜索、Apache Lucene和Hibernate Search、Spring Security和OAuth

◆ 重点介绍Java SE 8中新增加的常用功能,如lambda表达式和新的JSR 310 Java 8 Date and Time API等


6、高性能MySQL


《高性能mysql(第3版)》是mysql 领域的经典之作,拥有广泛的影响力。第3 版更新了大量的内容,不但涵盖了最新mysql 5.5版本的新特性,也讲述了关于固态盘、高可扩展性设计和云计算环境下的数据库相关的新内容,原有的基准测试和性能优化部分也做了大量的扩展和补充。全书共分为16 章和6 个附录,内容涵盖mysql 架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的mysql 和mysql相关工具等方面的内容。每一章都是相对独立的主题,读者可以有选择性地单独阅读。


7、MySQL 5.7从入门到精通(视频教学版)(第2版)

本书主要包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、日志以及性能优化。

后通过3个综合案例的数据库设计,进一步讲述MySQL在实际工作中的应用。重点介绍MySQL安装与配置、数据类型和运算符以及数据表的操作。本书注重实战操作,帮助读者循序渐进地掌握MySQL中的各项技术。

本书共有480个实例和19个综合案例,还有大量的经典习题。随书赠送了近20小时培训班形式的视频教学录像,详细讲解了书中每一个知识点和每一个数据库操作的方法和技巧。同时光盘中还提供了本书所有例子的源代码,读者可以直接查看和调用。 本书适合MySQL数据库初学者、MySQL数据库开发人员和MySQL数据库管理员


8、《深入理解Java虚拟机:JVM高级特性与最佳实践》

本书适合所有Java程序员、系统调优师和系统架构师阅读。共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。



㈤ 关于计算机编程c语言,java,自学看哪些书比较浅显易懂

学C语言,建议你用《C程序设计(第三版)》,谭浩强 着,从数据类型,基本表达式,再到条件语句,循环语句,然后学习函数,再加上一些简单的数组知识,就可以了!一句话,到现在为止,你只要理解结构化程序设计的思想也就够了!

㈥ 推荐一些关于算法的书籍

1、数据结构与算法分析:C语言描述(适合入门)

这本书相对于算法导论要简单一些,更适合入门。算法导论其实有比较强的理论性,看起来比较吃力。

《数据结构与算法分析:C语言描述》内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括。由于《数据结构与算法分析:C语言描述(原书第2版)》选材新颖,方法实用,题例丰富,取舍得当。《数据结构与算法分析:C语言描述》的目的是培养学生良好的程序设计技巧和熟练的算法分析能力,使得他们能够开发出高效率的程序。从服务于实践又锻炼学生实际能力出发,书中提供了大部算法的C程序和伪码例程。

2、算法设计与分析基础(适合入门)

作者基于丰富的教学经验,开发了一套对算法进行分类的新方法。这套方法站在通用问题求解策略的高度,能对现有的大多数算法都能进行准确分类,从而使本书的读者能够沿着一条清晰的、一致的、连贯的思路来探索算法设计与分析这一迷人领域。本书作为第2版,相对第1版增加了新的习题,还增加了“迭代改进”一章,使得原来的分类方法更加完善。

3.0、算法引论:一种创造性方法(适合入门)

和普通的算法书不同,这本书从创造性的角度出发——如果说算法导论讲的是有哪些算法,那么算法引论讲的就是如何创造算法。结合前面的算法设计与分析基础,这本书把能解决的算法问题数量扩大了一个数量级。

3.1 算法竞赛 | 信息学奥赛一本通(算竞入门)

AlphaWA同学推荐的入门书籍,网上没有PDF版本,自己去淘宝买喽。

3.2 算法竞赛 | 算法竞赛进阶指南(算竞进阶)

㈦ 学java看什么书

建议你这样试试看:首先初学者看书学习Java是非常不明智的,因为技术性的书籍是非常难啃的,因为我做Java这块有十多年了,非常了解看书自学Java是多么没有效率,不适合初学者Java。你应该选择一套系统的Java学习教程,然后跟着教程走。书籍应该是当你会实际写程序后,然后你看技术书籍,这样就可以理解的更加深刻。而你直接看书是非常难懂的,最后直学个理论,不会实际应用。

  1. Head First Java教材,看起来都特别轻松,图文并茂,简单易懂,适合初学者选择。

这样做的好处:教程是专业人士进行知识点分解讲解的,然后在配上适合初学者学习的书籍,让你更加深刻的理解每一个知识点的用途。

如果自己没有好的Java学习教程,可以添加这个Java学习qun:前面是四九四,中间是八零一,后面是九三一。找管理员获取教程链接。

注意事项:

  1. 前期有人指导,不要想着都靠自己自学,要学会借力。

  2. 学习编程就是多练习,至少有三分之二的时间都要拿来写大量的代码。

  3. 掌握好学习方法技巧,学习编程非常讲究技巧,关于这点多跟有经验的人交流。

㈧ 如何评价《垃圾回收的算法与实现》及其作者中村成洋

这本书我个人很推荐,非常适合用来入门学习GC知识了,很有可读性,里面有很多实用性的例子,很容易理解,至于作者我倒没有太多的了解

㈨ 如何评价《垃圾回收的算法与实现》及作者中村成洋

要说读瘾算篇GC知识系统性握《The Garbage Collection Handbook》;实现篇剖析象现角度看版本偏且些系统实现复杂略(例析RubiniusGC析young gening GC没析old genImmix GC)读完真恨给加几章节…
即便本书既授鱼授渔读者解析代码思路结合算篇领域介绍要阅读其GC实现源码绪所些缺失源码剖析算留给读者习题吧

阅读全文

与什么书籍介绍了垃圾收集算法相关的资料

热点内容
优信二手车解压后过户 浏览:62
Windows常用c编译器 浏览:778
关于改善国家网络安全的行政命令 浏览:833
安卓如何下载网易荒野pc服 浏览:654
javainetaddress 浏览:104
苹果4s固件下载完了怎么解压 浏览:1003
命令zpa 浏览:286
python编译器小程序 浏览:945
在app上看视频怎么光线调暗 浏览:540
可以中文解压的解压软件 浏览:593
安卓卸载组件应用怎么安装 浏览:913
使用面向对象编程的方式 浏览:340
程序员项目经理的年终总结范文 浏览:930
内衣的加密设计用来干嘛的 浏览:433
淮安数据加密 浏览:292
魔高一丈指标源码 浏览:982
松下php研究所 浏览:168
c回调java 浏览:401
梦幻端游长安地图互通源码 浏览:746
电脑本地文件如何上传服务器 浏览:314