導航:首頁 > 源碼編譯 > 什麼書籍介紹了垃圾收集演算法

什麼書籍介紹了垃圾收集演算法

發布時間: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實現源碼緒所些缺失源碼剖析算留給讀者習題吧

閱讀全文

與什麼書籍介紹了垃圾收集演算法相關的資料

熱點內容
gcc編譯手冊pdf 瀏覽:584
梁箍筋未標注加密區 瀏覽:627
自家網路連不上上面顯示加密 瀏覽:386
編譯後無法運行圖片 瀏覽:592
linux系統修改文件命令 瀏覽:702
iphone如何安裝中國石化app 瀏覽:176
app怎麼寫簡歷 瀏覽:680
金蝶kis雲app怎麼樣 瀏覽:708
cad命令xr 瀏覽:296
f如何設置ftp伺服器 瀏覽:833
編程題兔子生兔子python 瀏覽:421
加密數字卡專利申請 瀏覽:783
我的世界命令方塊該怎麼拿 瀏覽:785
浙江容錯伺服器廠家雲空間 瀏覽:196
linuxpython3idle 瀏覽:741
程序員成就感從哪來 瀏覽:547
游資抄底源碼公式 瀏覽:804
用VF命令 瀏覽:950
解壓速度14m 瀏覽:333
php獲取httpheader 瀏覽:301