国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

深入了解Java 5.0的垃圾收集

2019-11-17 05:52:34
字體:
供稿:網(wǎng)友

內(nèi)存管理是影響軟件應(yīng)用程序性能的一個(gè)重要因素。與實(shí)際的數(shù)據(jù)計(jì)算時(shí)間相比,分配和卸載內(nèi)存所用的時(shí)間更長。

雖然C++可對(duì)內(nèi)存分配與釋放進(jìn)行直接控制,java利用垃圾收集來回收程序不再需要的內(nèi)存,試圖掌握內(nèi)存管理。但是,在需要實(shí)時(shí)性能時(shí),與垃圾收集有關(guān)的“暫停”一直是人們反對(duì)應(yīng)對(duì)Java的中心論點(diǎn)。

垃圾收集是一個(gè)周期性的過程,它中斷程序的正常執(zhí)行,分析對(duì)象引用,并回收被分配但不再被引用訪問的內(nèi)存。在大型Java應(yīng)用程序中,垃圾收集暫停可能持續(xù)幾秒鐘,這段時(shí)間足以中斷任何類型的實(shí)時(shí)通信或控制系統(tǒng)。

因此,垃圾收集提供的內(nèi)存提取要求一些開發(fā)者更仔細(xì)地考慮內(nèi)存管理問題。即使Java并沒有提供和C++同等級(jí)別的內(nèi)存分配控制,編程模式仍然會(huì)對(duì)Java應(yīng)用程序的內(nèi)存性能產(chǎn)生重大影響。

在本文中,我將簡單回顧一下Java 5.0的垃圾收集調(diào)整功能。

Java 5.0垃圾收集原理

Java 1.5新特性??工效學(xué)??的目標(biāo)是通過最少的命令行調(diào)整,為JVM提供優(yōu)良的性能。工效學(xué)試圖為一個(gè)應(yīng)用程序選擇最佳的垃圾收集器、堆大小與運(yùn)行時(shí)間編譯器。

垃圾收集器的選擇何時(shí)會(huì)對(duì)用戶產(chǎn)生影響呢?對(duì)許多應(yīng)用程序來說,它根本沒有影響。也就是說,在垃圾收集產(chǎn)生的暫停的頻率與持續(xù)時(shí)間適度的情況下,應(yīng)用程序可在其規(guī)范內(nèi)執(zhí)行。如果一個(gè)大型應(yīng)用程序出現(xiàn)擴(kuò)充,產(chǎn)生大量線程、處理器、套接字和許多內(nèi)存,就會(huì)出現(xiàn)例外。

如果一個(gè)對(duì)象再也不能通過運(yùn)行程序中的任何指針到達(dá),則視其為垃圾。最直接的垃圾收集運(yùn)算法則簡單地在每個(gè)可到達(dá)的對(duì)象間迭代。那么,剩下的對(duì)象即為垃圾。這一方法所用的時(shí)間與活動(dòng)對(duì)象的數(shù)目成比例關(guān)系,且禁止用于維護(hù)許多活動(dòng)數(shù)據(jù)的大型應(yīng)用程序。

從Java 2開始,虛擬機(jī)合并了許多應(yīng)用分代收集組合的各種收集運(yùn)算法則。盡管簡單的垃圾收集檢查堆中的每一個(gè)活動(dòng)對(duì)象,但分代收集利用多數(shù)應(yīng)用程序的幾個(gè)憑經(jīng)驗(yàn)觀察得到的特性來避免額外工作。這些觀察得到的特性中最為重要的一個(gè)就是所謂的早期失效率。許多對(duì)象分配以后很快“已經(jīng)死亡”。例如,迭代器對(duì)象僅在單獨(dú)循環(huán)中存活。為優(yōu)化這種情況,我們對(duì)內(nèi)存進(jìn)行分代管理,或在內(nèi)存池中保留不同年齡的對(duì)象。當(dāng)一代裝滿時(shí),就對(duì)這個(gè)代進(jìn)行垃圾收集。對(duì)象被分配到更年齡對(duì)象代,或新生代中。由于早期失效率,多數(shù)對(duì)象在那里死亡。

如果垃圾收集器成為瓶頸,你可能希望自定義代的大小。詳細(xì)檢查垃圾收集器的輸出,然后探究單個(gè)性能計(jì)量單位對(duì)垃圾收集器參數(shù)的靈敏度。

初始化時(shí),保留一個(gè)最大的地址空間,在必要時(shí)才分配給物理內(nèi)存。為對(duì)象內(nèi)存保留的全部地址空間可分為新生代和舊生代。新生代由eden和兩個(gè)生存空間組成。對(duì)象最初分配到eden中。任何時(shí)候,一個(gè)生存空間為空,并作為下一個(gè)空間的目的地,在eden與另一個(gè)生存空間中復(fù)制活動(dòng)對(duì)象的集合。對(duì)象以這種方式在生存空間中復(fù)制,直到它們老化,或復(fù)制到舊生代中。與舊生代關(guān)系密切的第三個(gè)代稱為永生代。這是一個(gè)特別的代,因?yàn)樗A籼摂M機(jī)所需要的數(shù)據(jù),來描述在Java語言中沒有等同物的對(duì)象。例如,描述類與方法的對(duì)象存儲(chǔ)在永生代中。


性能因素

Java應(yīng)用程序(特別是垃圾收集)有兩個(gè)性能計(jì)量單位:吞吐量與暫停。吞吐量是指在一段較長時(shí)間內(nèi),沒有用于垃圾收集的時(shí)間百分比。吞吐量包括用于分配的時(shí)間(但用于調(diào)整分配速度的時(shí)間一般不包括在內(nèi))。暫停是應(yīng)用程序因?yàn)槔占霈F(xiàn)的停頓時(shí)間。

一些用戶還對(duì)其他因素較為敏感。例如,占用率(footPRint) 是一批工作進(jìn)程的集合,以頁和緩沖行數(shù)計(jì)量,在物理內(nèi)存有限或者有很多進(jìn)程的系統(tǒng)中,占用率可表示擴(kuò)展性。

反應(yīng)性(Promptness)是對(duì)象死去的時(shí)間和內(nèi)存變?yōu)榭捎脮r(shí)的時(shí)間差,是分布系統(tǒng),包括遠(yuǎn)程方法調(diào)用(RMI)中的重要因素。

通常來說,特定的代大小選擇這些因素之?


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 内丘县| 阿荣旗| 岳普湖县| 马山县| 金秀| 桐梓县| 大埔县| 曲阜市| 清丰县| 安泽县| 上犹县| 巢湖市| 错那县| 和平区| 连平县| 塘沽区| 芦山县| 江城| 浦江县| 冕宁县| 班戈县| 乌兰县| 沽源县| 侯马市| 炉霍县| 溆浦县| 奉节县| 诸城市| 陵川县| 静海县| 盐亭县| 西丰县| 随州市| 海伦市| 陇川县| 五峰| 富锦市| 临沭县| 教育| 泽库县| 保山市|