本篇內容介紹了“java堆的內存模型介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、網站空間、營銷軟件、網站建設、鞏留網站維護、網站推廣。根據對象存活的特點以及使垃圾回收產生算法產生較大的收益,將堆區(qū)分為兩大塊,一個是Old區(qū),一個是Young區(qū)。Young區(qū)分為兩大塊,一個是Survivor區(qū)(S0+S1),一塊是Eden區(qū)。S0和S1一樣大,也可以叫From和To。
一般情況下,新創(chuàng)建的對象都會被分配到Eden區(qū),一些特殊的大的對象會直接分配到Old區(qū)。
比如有對象A,B,C等創(chuàng)建在Eden區(qū),但是Eden區(qū)的內存空間肯定有限,比如有100M,假如已經使用了
100M或者達到一個設定的臨界值,這時候就需要對Eden內存空間進行清理,即垃圾收集(GarbageCollect),
這樣的GC我們稱之為MinorGC,MinorGC指得是Young區(qū)的GC。經過GC之后,有些對象就會被清理掉,有些對象可能還存活著,對于存活著的對象需要將其復制到Survivor區(qū),然后再清空Eden區(qū)中的這些對象。
下面根據垃圾收集算法
詳細講解下為什么要分為surivor0和surivor1,難道一個survivor區(qū)不行嗎?
假設只有一個s0區(qū),eden區(qū)回收之后,一部分對象存放到了s0區(qū),此時eden區(qū)空間全部釋放,內存都是連續(xù)的。但是因為s0區(qū)也會進行垃圾回收,它有一部分存活的對象進入到了Old區(qū),還有一部分對象存活留下來,這時候s0區(qū)就產生了內存碎片,為了使s0區(qū)的內存空間相對連續(xù),再分配一個s1區(qū),大小和s0一樣,每次垃圾回收的時候,將eden區(qū)和s0區(qū)存活的對象移動到s1區(qū),這樣永遠都能保證s0或者s1的內存空間是連續(xù)的。當然,這樣的情況下會使得s0或者s1區(qū)有一個空間永遠為空,浪費10%的內存空間,當然為了較大化的利用young區(qū),這樣的浪費是被接受的。所以,young區(qū)一次GC流程是這樣的:在同一個時間點上,S0和S1只能有一個區(qū)有數據,另外一個是空的。假設s0區(qū)有數據,此時進行一次GC操作,s0區(qū)中對象的年齡就會+1,而Eden區(qū)中所有存活的對象會被復制到是s1區(qū),s0區(qū)中還能存活的對象會有兩個去處。若對象年齡達到之前設置好的年齡閾值,此時對象會被移動到Old區(qū),Eden區(qū)和s0區(qū)沒有達到閾值的對象會被復制到s1區(qū),s0區(qū)將又會變?yōu)榭盏摹?/p>
“java堆的內存模型介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯網站,小編將為大家輸出更多高質量的實用文章!
網站題目:java堆的內存模型介紹-創(chuàng)新互聯
轉載來源:http://m.rwnh.cn/article20/cssjco.html
成都網站建設公司_創(chuàng)新互聯,為您提供虛擬主機、移動網站建設、外貿網站建設、網站建設、手機網站建設、企業(yè)建站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯