日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器?

發布時間:2023/12/3 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

垃圾收集算法,垃圾收集器

讓我們開始快速回顧一下我作為Java開發人員的職業生涯的早期。 我想消除正在進行的測試中的垃圾回收(GC)暫停。 瞧,當我發現無法完成時,我很生氣。 那時,我把問題留在了“設計錯誤”中,并繼續前進。 對詹姆斯·高斯林 ( James Gosling)或做出決定的負責人感到生氣。

幾天前,我遇到了一種使我想起過去的時代的情況。 幸運的是,過去的歲月在我身上積累了一些關于JVM內部的見解,我認為我會以博客文章的形式分享我的最新想法。

首先,你們中的某些人可能還記得我們90年代后期使用的Java 1.1。 那時,您實際上就有可能關閉GC。 至少在Solaris中,Sun提供的JVM版本提供了將-noasyncgc選項添加到JVM啟動參數的可能性。 為了向后兼容,直到JDK 1.4發行以來,該選項一直受支持,但是從JDK 1.2開始,它什么也沒做。 除了增加啟動腳本的復雜性。

該選項關閉了JVM控制的垃圾收集器。 您仍然可以通過從代碼中顯式調用System.gc()來收集未使用的對象。 聽起來像經驗豐富的工程師可以很好地利用靈活性。 那么–為什么要刪除此選項?

實際上,當您考慮以下因素時,此舉背后的動機就變得有意義了:

  • 通過禁用GC,您實際上聲稱您知道應用程序在運行時需要多少內存。 但是,如果您錯了怎么辦? 堆填滿后,禁用GC將導致應用程序終止。
  • 調用System.gc()可能根本不執行垃圾回收。 在現代JVM中,無非是向JVM提出的建議:“我認為這是運行GC的好地方”。 并且–您的sysadmin可能通過指定-XX:+DisableExplicitGC啟動參數完全禁用了System.gc()調用。
  • 如果System.gc()實際上是由JVM執行的,則將導致完整的垃圾回收。 對于大堆,這往往非常昂貴,并且會導致較長的暫停時間。
  • 通過調用System.gc()仍然無法實現可預測的GC計時,尤其是在多線程應用程序中。

    現在,看一下以上幾點,并想象一個可以在沒有自動GC的JVM中運行的應用程序。 您可能不想將房子押在房子的行為上。 當我嘗試描繪調試會話以跟蹤該應用程序的任何性能問題時,我的背上的頭發立即開始發高。 所以也許先生。 戈斯林畢竟沒有犯設計錯誤。

    但是,如果我停下來的停頓時間太長了,該怎么辦? 我真的希望關閉GC嗎? 實際上有一些可能性:

    • JVM分配了一部分內存,您可以在其中關閉GC。

    但是,我建議您僅在確定要做什么時才轉向這些解決方案。 在99.9%的情況下,垃圾收集器會比您更聰明。

    參考: 為什么我不能關閉垃圾收集器? 由我們的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上獲得。

翻譯自: https://www.javacodegeeks.com/2012/12/why-cant-i-turn-off-the-garbage-collector.html

垃圾收集算法,垃圾收集器

總結

以上是生活随笔為你收集整理的垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器?的全部內容,希望文章能夠幫你解決所遇到的問題。

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