91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM運行時內存的分代收集算法是什么

發布時間:2022-01-14 14:12:33 來源:億速云 閱讀:207 作者:小新 欄目:大數據

這篇文章給大家分享的是有關JVM運行時內存的分代收集算法是什么的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

2.4.5. 分代收集算法

分代收集法是目前大部分 JVM 所采用的方法,其核心思想是根據對象存活的不同生命周期將內存劃分為不同的域,一般情況下將 GC 堆劃分為老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特點是每次垃圾回收時只有少量對象需要被回收,新生代的特點是每次垃圾回收時都有大量垃圾需要被回收,因此可以根據不同區域選擇不同的算法。

2.4.5.1. 新生代與復制算法

目前大部分 JVM 的 GC 對于新生代都采取 Copying 算法,因為新生代中每次垃圾回收都要回收大部分對象,即要復制的操作比較少,但通常并不是按照 1:1 來劃分新生代。一般將新生代劃分為一塊較大的 Eden 空間和兩個較小的 Survivor 空間(From Space, To Space),每次使用Eden 空間和其中的一塊 Survivor 空間,當進行回收時,將該兩塊空間中還存活的對象復制到另一塊 Survivor 空間中。

JVM運行時內存的分代收集算法是什么

2.4.5.2. 老年代與標記復制算法

而老年代因為每次只回收少量對象,因而采用 Mark-Compact 算法。

1. JAVA 虛擬機提到過的處于方法區的永生代(Permanet Generation),它用來存儲 class 類,常量,方法描述等。對永生代的回收主要包括廢棄常量和無用的類。

2. 對象的內存分配主要在新生代的 Eden Space 和 Survivor Space 的 From Space(Survivor 目前存放對象的那一塊),少數情況會直接分配到老生代。

3. 當新生代的 Eden Space 和 From Space 空間不足時就會發生一次 GC,進行 GC 后,Eden Space 和 From Space 區的存活對象會被挪到 To Space,然后將 Eden Space 和 From Space 進行清理。

4. 如果 To Space 無法足夠存儲某個對象,則將這個對象存儲到老生代。

5. 在進行 GC 后,使用的便是 Eden Space 和 To Space 了,如此反復循環。

6. 當對象在 Survivor 區躲過一次 GC 后,其年齡就會+1。默認情況下年齡到達 15 的對象會被移到老生代中。

      2.5.JAVA 四中引用類型

2.5.1. 強引用

在 Java 中最常見的就是強引用,把一個對象賦給一個引用變量,這個引用變量就是一個強引

用。當一個對象被強引用變量引用時,它處于可達狀態,它是不可能被垃圾回收機制回收的,即

使該對象以后永遠都不會被用到 JVM 也不會回收。因此強引用是造成 Java 內存泄漏的主要原因之

一。

2.5.2. 軟引用

軟引用需要用 SoftReference 類來實現,對于只有軟引用的對象來說,當系統內存足夠時它

不會被回收,當系統內存空間不足時它會被回收。軟引用通常用在對內存敏感的程序中。

2.5.3. 弱引用

弱引用需要用 WeakReference 類來實現,它比軟引用的生存期更短,對于只有弱引用的對象

來說,只要垃圾回收機制一運行,不管 JVM 的內存空間是否足夠,總會回收該對象占用的內存。

2.5.4. 虛引用

虛引用需要 PhantomReference 類來實現,它不能單獨使用,必須和引用隊列聯合使用。虛引用的主要作用是跟蹤對象被垃圾回收的狀態。

2.6.GC 分代收集算法

VS 分區收集算法

2.6.1. 分代收集算法

當前主流 VM 垃圾收集都采用”分代收集”(Generational Collection)算法, 這種算法會根據對象存活周期的不同將內存劃分為幾塊, 如 JVM 中的 新生代、老年代、永久代,這樣就可以根據各年代特點分別采用最適當的 GC 算法

2.6.1.1. 在新生代-復制算法

每次垃圾收集都能發現大批對象已死, 只有少量存活. 因此選用復制算法, 只需要付出少量存活對象的復制成本就可以完成收集.

2.6.1.2. 在老年代-標記整理算法

因為對象存活率高、沒有額外空間對它進行分配擔保, 就必須采用“標記—清理”或“標記—整理”算法來進行回收, 不必進行內存復制, 且直接騰出空閑內存.

2.6.2. 分區收集算法

分區算法則將整個堆空間劃分為連續的不同小區間, 每個小區間獨立使用, 獨立回收. 這樣做的好處是可以控制一次回收多少個小區間 , 根據目標停頓時間, 每次合理地回收若干個小區間(而不是整個堆), 從而減少一次 GC 所產生的停頓。

2.7.GC 垃圾收集器

Java 堆內存被劃分為新生代和年老代兩部分,新生代主要使用復制和標記-清除垃圾回收算法;年老代主要使用標記-整理垃圾回收算法,因此 java 虛擬中針對新生代和年老代分別提供了多種不同的垃圾收集器,JDK1.6 中 Sun HotSpot 虛擬機的垃圾收集器如下

JVM運行時內存的分代收集算法是什么

感謝各位的閱讀!關于“JVM運行時內存的分代收集算法是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

新宾| 靖宇县| 长阳| 罗源县| 闽侯县| 西华县| 塔河县| 阿城市| 叶城县| 凤阳县| 尼勒克县| 建阳市| 新宾| 连州市| 繁峙县| 洱源县| 黄浦区| 南安市| 禹城市| 越西县| 嘉峪关市| 昌图县| 曲阜市| 涿州市| 山阴县| 姜堰市| 河津市| 读书| 涿鹿县| 深水埗区| 龙泉市| 大宁县| 锡林浩特市| 曲松县| 宜都市| 铜陵市| 高要市| 东辽县| 东莞市| 手机| 集贤县|