成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM優化:垃圾回收概述

開發 前端
“虛引用”顧名思義,它是最弱的一種引用關系。如果一個對象僅持有虛引用,在任何時候都可能被垃圾回收器回 收。虛引用主要用來跟蹤對象被垃圾回收器回收的活動。

一、什么是垃圾回收

說起垃圾收集(Garbage Collection, 下文簡稱GC) , 有不少人把這項技術當作Java語言的伴生產物。 事實上, 垃圾收集的歷史遠遠比Java久遠, 在1960年誕生于麻省理工學院的Lisp是第一門開始使 用內存動態分配和垃圾收集 技術的語言。垃圾收集需要完成的三件事情: 哪些內存需要回收? 什么時候回收? 如何回收?

二、Java垃圾回收的優缺點

優點:

a.不需要考慮內存管理,

b.可以有效的防止內存泄漏,有效的利用可使用的內存,

c.由于有垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"

缺點:

java開發人員不了解自動內存管理, 內存管理就像一個黑匣子,過度依賴就會降低我們解決內存溢出/內存泄漏等問題 的能力。

三、判斷對象是否存活 - 引用計數算法

引用計數算法可以這樣實現:給每個創建的對象添加一個引用計數器,每當此對象被某個地方引用時,計數值+1, 引用失效時-1,所以當計數值為0時表示對象已經不能被使用。引用計數算法大多數情況下是個比較不錯的算法, 簡單直接,也有一些著名的應用案例但是對于Java虛擬機來說,并不是一個好的選擇,因為它很難解決對象直接相 互循環引用的問題。

優點: 實現簡單,執行效率高,很好的和程序交織。

缺點: 無法檢測出循環引用。

譬如有A和B兩個對象,他們都互相引用,除此之外都沒有任何對外的引用,那么理論上A和B都可以被作為垃 圾回收掉,但實際如果采用引用計數算法,則A、B的引用計數都是1,并不滿足被回收的條件,如果A和B之 間的引用一直存在,那么就永遠無法被回收了

四、判斷對象是否存活-可達性分析算法

在主流的商用程序語言如Java、C#等的主流實現中,都是通過可達性分析(Reachability Analysis)來判斷對象是否存 活的。此算法的基本思路就是通過一系列的“GC Roots”的對象作為起始點,從起始點開始向下搜索到對象的路徑。 搜索所經過的路徑稱為引用鏈(Reference Chain),當一個對象到任何GC Roots都沒有引用鏈時,則表明對象“不可 達”,即該對象是不可用的。

在Java語言中,可作為GC Roots的對象包括下面幾種:

  • 棧幀中的局部變量表中的reference引用所引用的對象
  • 方法區中static靜態引用的對象
  • 方法區中final常量引用的對象
  • 本地方法棧中JNI(Native方法)引用的對象
  •  Java虛擬機內部的引用, 如基本數據類型對應的Class對象, 一些常駐的異常對象(比如 NullPointExcepiton、 OutOfMemoryError) 等, 還有系統類加載器。
  • 所有被同步鎖(synchronized關鍵字) 持有的對象。
  • 反映Java虛擬機內部情況的JMXBean、 JVMTI中注冊的回調、 本地代碼緩存等。

五、JVM之判斷對象是否存活

finalize()方法最終判定對象是否存活:

即使在可達性分析算法中判定為不可達的對象, 也不是“非死不可”的, 這時候它們暫時還處于“緩 刑”階段, 要真 正宣告一個對象死亡, 至少要經歷兩次標記過程:

第一次標記:

如果對象在進行可達性分析后發現沒有與GC Roots相連接的引用鏈, 那它將會被第一次標記, 隨后進行一次篩 選, 篩選的條件是此對象是否有必要執行finalize()方法。

沒有必要:

假如對象沒有覆蓋finalize()方法, 或者finalize()方法已經被虛擬機調用過, 那么虛擬機將這兩種情況都視為“沒有必 要執行”。

有必要:

如果這個對象被判定為確有必要執行finalize()方法, 那么該對象將會被放置在一個名為F-Queue的 隊列之中, 并在 稍后由一條由虛擬機自動建立的、 低調度優先級的Finalizer線程去執行它們的finalize() 方法。 finalize()方法是對 象 逃脫死亡命運的最后一次機會, 稍后收集器將對F-Queue中的對象進行第二次小規模的標記, 如果對 象要在 finalize()中成功拯救自己——只要重新與引用鏈上的任何一個對象建立關聯即可, 譬如把自己 (this關鍵字) 賦值 給某個類變量或者對象的成員變量, 那在第二次標記時它將被移出“即將回收”的集 合; 如果對象這時候還沒有逃 脫, 那基本上它就真的要被回收了。

六、再談引用

在JDK1.2以前,Java中引用的定義很傳統: 如果引用類型的數據中存儲的數值代表的是另一塊內存的起始地址,就 稱這塊內存代表著一個引用。這種定義有些狹隘,一個對象在這種定義下只有被引用或者沒有被引用兩種狀態。 我 們希望能描述這一類對象: 當內存空間還足夠時,則能保存在內存中;如果內存空間在進行垃圾回收后還是非常緊 張,則可以拋棄這些對象。很多系統中的緩存對象都符合這樣的場景。 在JDK1.2之后,Java對引用的概念做了擴 充,將引用分為 強引用(Strong Reference) 、 軟引用(Soft Reference) 、 弱引用(Weak Reference) 和 虛引 用(Phantom Reference) 四種,這四種引用的強度依次遞減。

1、強引用

強引用是使用最普遍的引用。如果一個對象具有強引用,那垃圾回收器絕不會回收它。當內存空間不足,Java虛擬 機寧愿拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足的問 題。 ps:強引用其實也就是我們平時A a = new A()這個意思。

2、軟引用

如果一個對象只具有軟引用,則內存空間足夠,垃圾回收器就不會回收它;如果內存空間不足了,就會回收這些對 象的內存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。 軟引用可以和一個引用隊列 (ReferenceQueue)聯合使用,如果軟引用所引用的對象被垃圾回收器回收,Java虛擬機就會把這個軟引用加入到 與之關聯的引用隊列中。

3、弱引用

用來描述那些非必須對象, 但是它的強度比軟引用更弱一些, 被弱引用關聯的對象只能生存到下一次垃圾收集發 生為止。 當垃圾收集器開始工作, 無論當前內存是否足夠, 都會回收掉只 被弱引用關聯的對象。 在JDK 1.2版之 后提供了WeakReference類來實現弱引用。 弱引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用 所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。

弱引用與軟引用的區別在于: ①更短暫的生命周期; ②一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。

4、虛引用

“虛引用”顧名思義,它是最弱的一種引用關系。如果一個對象僅持有虛引用,在任何時候都可能被垃圾回收器回 收。虛引用主要用來跟蹤對象被垃圾回收器回收的活動。

虛引用與軟引用和弱引用的一個區別在于: ①虛引用必須和引用隊列 (ReferenceQueue)聯合使用。 ②當垃圾回收器準備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,把這個虛引用加入到 與之 關聯的引用隊列中。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2021-11-05 15:23:20

JVM回收算法

2022-06-22 09:54:45

JVM垃圾回收Java

2009-12-30 10:14:29

JVM垃圾回收

2010-09-25 15:33:19

JVM垃圾回收

2010-09-27 09:01:26

JVM分代垃圾回收

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2022-06-07 07:10:40

MinorGCMajorGCFullGC

2009-12-25 16:15:31

JVM垃圾回收算法

2017-04-25 14:39:55

JVM內存Java

2010-09-16 15:10:24

JVM垃圾回收機制

2010-09-25 15:26:12

JVM垃圾回收

2022-06-10 07:13:29

JVM垃圾回收

2021-10-05 20:29:55

JVM垃圾回收器

2012-01-09 16:53:36

JavaJVM

2024-03-11 16:27:02

垃圾回收器JVM

2012-01-09 17:06:16

JavaJVM

2011-12-05 12:51:58

JVMJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线拍偷自揄拍视频 | 亚洲国产精品视频 | 久久最新 | 亚洲欧美日韩一区二区 | 亚洲黄色av| 黄色一级大片在线观看 | 午夜影院视频 | 亚洲成人综合社区 | 色播久久久 | 国产乱性 | 性高湖久久久久久久久 | 精品少妇一区二区三区日产乱码 | 久久精品国产一区二区电影 | 中文字幕在线观看第一页 | 性色av一区二区三区 | 精品一区二区三区在线观看国产 | 99综合网| 国产精品视频yy9299一区 | 欧美日韩在线免费 | 国产福利资源 | 亚洲精品日韩在线观看 | 成人小视频在线观看 | 男人天堂99 | 欧美999 | 国产农村妇女毛片精品久久麻豆 | 91成人免费 | 91av在线不卡| 亚洲一区国产精品 | 蜜臀网| 亚洲成人av | 午夜欧美一区二区三区在线播放 | 91免费电影| 超碰婷婷| 亚洲一区二区在线播放 | 中文字幕不卡 | 亚洲欧洲在线看 | 国产精品一区二区av | 久久久精品日本 | 国产亚洲一区二区三区在线观看 | 国产成人精品一区二 | 91久久久久久久久 |