日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java垃圾回收(1)

發(fā)布時間:2023/12/3 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java垃圾回收(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是有關垃圾收集(GC)的系列文章中的第一篇。 我希望能夠涵蓋整個系列過程中的理論知識以及熱點虛擬機中的所有主要收集器。 這篇文章僅說明什么是垃圾回收,以及不同回收器共有的元素。

我為什么要在乎?

您的Java虛擬機可以為您管理內存-這非常方便-但默認情況下可能未對它進行優(yōu)化調整。 通過了解垃圾收集背后的一些理論,您可以更輕松地調整收集器。 一個普遍關心的問題是收集器的效率,也就是說,您的程序花了多少時間執(zhí)行程序代碼而不是收集垃圾。 另一個常見問題是應用程序暫停的時間長。

關于垃圾收集還有很多傳聞和民間傳說,因此更詳細地了解算法確實有助于避免陷入常見的陷阱和陷阱。 此外,對于任何對如何應用和使用計算機科學原理感興趣的人,JVM內部都是一件很棒的事情。

停止世界是什么意思?

您的程序(或GC-Speak中的mutator)將在運行時分配對象。 在某個時候,需要收集堆,并且熱點中的所有收集器都會暫停您的應用程序。 “世界停止”一詞用于表示所有增變器的線程都已暫停。

可以實現(xiàn)不需要暫停的垃圾回收器。 Azul已在其Zing虛擬機中實現(xiàn)了有效的不間斷收集器。 我不會介紹它是如何工作的,但是如果您想了解更多信息,會有一張非常有趣的白皮書 。

年輕/弱世代假說

簡而言之: 大多數(shù)分配的對象都死于年輕 1 。 通過對1980年代一大批程序的內存分配和活動模式進行實證分析,證明了這一概念。 研究人員發(fā)現(xiàn),不僅大多數(shù)物體死于年輕,而且一旦它們活到一定年齡,它們就會活很長一段時間。 下圖取自SUN / Oracle研究,以直方圖的形式查看了對象的壽命。

堆的組織方式如何?

年輕的世代假設催生了世代垃圾收集的思想,在世代垃圾收集中,堆被分為幾個區(qū)域,每個區(qū)域中對象的放置與它們的年齡相對應。 以上這些垃圾收集器( G1除外)共有的一個要素是將堆組織到不同空間的方式。

最初分配對象時(如果適合)將它們存儲在Eden空間中。 如果對象在集合中幸存下來,那么它將最終到達幸存者空間。 如果它能夠存活幾次(您的使用期限閾值),則該對象最終將出現(xiàn)在使用期限的空間中。 收集器收集這些空間的算法的細節(jié)各不相同,因此我將在以后的博客文章中單獨介紹它們。

這種劃分是有益的,因為它允許您在不同的空間上使用不同的算法。 如果大多數(shù)對象都已失效,則某些GC算法效率更高;如果大多數(shù)對象都處于活動狀態(tài),則某些GC算法效率更高。 由于世代相傳的假設,通常是到了在伊甸園收集大多數(shù)物體的時候,幸存者空間已經(jīng)死了,而保有權的大多數(shù)物體還是活著的。

還有永久性的-永久的一代。 這是一個特殊的世代,其中包含與Java語言本身相關的對象。 例如,此處包含有關已加載類的信息。 從歷史上看,被插入或為常量的字符串也保存在這里。 永久代已被刪除,轉而支持元空間 。

多個收藏家

熱點虛擬機實際上具有各種不同的垃圾收集器。 每個都有不同的性能特征集合,并且更(或更少)適合于不同的任務。 我將要研究的關鍵垃圾收集器是:

  • 并行清理 (PS):最近發(fā)布的JVM中的默認收集器。 為了收集而停止運行,但是并行收集(即使用多個線程)。
  • 并發(fā)標記掃描 (CMS):此收集器具有多個階段,其中一些階段使世界停滯不前,但在該階段的多個階段也與程序同時運行。
  • 增量并發(fā)標記掃描 (iCMS):CMS的一種變體,旨在降低暫停時間。 有時可以做到這一點!
  • 垃圾優(yōu)先 (G1):一種新型的收集器,最近變得更加穩(wěn)定,并且使用量正在緩慢增加。

結論

我已經(jīng)對垃圾收集提出了一些介紹性的觀點,在下一篇文章中,我將介紹Parallel Scavenge收集器-它是當前的默認收集器。 我還想提供我的雇主鏈接,該雇主擁有我們認為非常有用的GC日志分析器 。

  • “熱點”是在openjdk和官方Oracle JVM之后通用的代碼庫的名稱。 從Java 7開始,openjdk是Java SE的參考實現(xiàn)。
  • 從技術上講,我上面描述的是具有經(jīng)驗驗證的“弱代假設”。 還有一個很強的變體,可以說是:堆分配對象的平均生存期等于可訪問存儲的平均數(shù)量 。 實際上,這可以通過采取利特爾定律并將Λ設置為1來從數(shù)學上證明。
  • 我將在G1特定的博客文章中介紹G1中堆的組織方式。
  • 參考: Insightful Logic博客上來自我們JCG合作伙伴 Richard Warburton的Java垃圾收集(1) 。

    翻譯自: https://www.javacodegeeks.com/2013/06/garbage-collection-in-java-1.html

    總結

    以上是生活随笔為你收集整理的Java垃圾回收(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。