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

Java 的七種垃圾收集器

開發
垃圾收集器并不只有一種,Java 虛擬機(JVM)有七種不同的垃圾收集器,了解每種垃圾收集器的目的和優點是很有用的。

了解 Java 中的內存管理。

用 C 或 C++ 這樣的編程語言寫一個應用時,需要編寫代碼來銷毀內存中不再需要的對象。當應用程序擴展得越來越復雜時,未使用對象被忽略釋放的可能性就越大。這會導致內存泄露,最終內存耗盡,在某個時刻將沒有更多的內存可以分配。結果就是應用程序運行失敗并出現 OutOfMemoryError 錯誤。但在 Java 中,垃圾收集器Garbage Collection(GC)會在程序執行過程中自動運行,減輕了手動分配內存和可能的內存泄漏的任務。

垃圾收集器并不只有一種,Java 虛擬機(JVM)有七種不同的垃圾收集器,了解每種垃圾收集器的目的和優點是很有用的。

1、Serial 收集器

Serial threaded garbage collection

Serial threaded garbage collection

垃圾收集器的原始實現,使用單線程。當垃圾收集器運行時,會停止應用程序(通常稱為“stop the world”事件)。適用于能夠承受短暫停頓的應用程序。該垃圾收集器占用內存空間比較小,因此這是嵌入式應用程序的首選垃圾收集器類型。在運行時使用以下命令啟用該垃圾收集器:

    $ java -XX:+UseSerialGC

2、Parallel 收集器

Parallel garbage collection

Parallel garbage collection

像 Serial 收集器一樣,Parallel 收集器也使用“stop the world”方法。這意味著,當垃圾收集器運行時,應用程序線程會停止。但是不同的是,Parallel 收集器運行時有多個線程執行垃圾收集操作。這種類型的垃圾收集器適用于在多線程和多處理器環境中運行中到大型數據集的應用程序。

這是 JVM 中的默認垃圾收集器,也被稱為吞吐量收集器。使用該垃圾收集器時可以通過使用各種合適的 JVM 參數進行調優,例如吞吐量、暫停時間、線程數和內存占用。如下:

  • 線程數:-XX:ParallelGCThreads=<N>
  • 暫停時間:-XX:MaxGCPauseMillis=<N>
  • 吞吐量(垃圾收集花費的時間與實際應用程序執行的時間相比):-XX:GCTimeRatio=<N>
  • 最大堆內存:-Xmx<N>

Parallel 收集器可以使用該命令顯式啟用:java -XX:+UseParallelGC 。使用這個命令,指定在新生代中通過多個線程進行垃圾回收,而老年代中的垃圾收集和內存壓縮仍使用單個線程完成的。

還有一個版本的的 Parallel 收集器叫做 “Parallel Old GC”,它對新生代和老年代都使用多線程,啟用命令如下:

    $ java -XX:+UseParallelOldGC

3、Concurrent Mark Sweep(CMS)收集器

Concurrent garbage collection

Concurrent garbage collection

Concurrent Mark Sweep(CMS)垃圾收集器與應用程序并行運行。對于新生代和老年代都使用了多線程。在 CMS 垃圾收集器刪除無用對象后,不會對存活對象進行內存壓縮。該垃圾收集器和應用程序并行運行,會降低應用程序的響應時間,適用于停頓時間較短的應用程序。這個收集器在 Java8 已過時,并在 Java14 中被移除。如果你仍在使用有這個垃圾收集器的 Java 版本,可以使用如下命令啟用:

    $ java -XX:+UseConcMarkSweepGC

在 CMS 垃圾收集器使用過程中,應用程序將暫停兩次。首次暫停發生在標記可直接訪問的存活對象時,這個暫停被稱為初始標記。第二次暫停發生在 CMS 收集器結束時期,來修正在并發標記過程中,應用程序線程在 CMS 垃圾回收完成后更新對象時被遺漏的對象。這就是所謂的重新標記。

4、G1 收集器

Garbage first

Garbage first

G1 垃圾收集器旨在替代 GMS。G1 垃圾收集器具備并行、并發以及增量壓縮,且暫停時間較短。與 CMS 收集器使用的內存布局不同,G1 收集器將堆內存劃分為大小相同的區域,通過多個線程觸發全局標記階段。標記階段完成后,G1 知道哪個區域可能大部分是空的,并首選該區域作為清除/刪除階段。

在 G1 收集器中,一個對象如果大小超過半個區域容量會被認為是一個“大對象” 。這些對象被放置在老年代中,在一個被稱為“humongous region”的區域中。 啟用 G1 收集器的命令如下:

    $ java -XX:+UseG1GC

5、Epsilon 收集器

該垃圾收集器是在 Java11 中引入的,是一個 no-op(無操作)收集器。它不做任何實際的內存回收,只負責管理內存分配。Epsilon 只在當你知道應用程序的確切內存占用情況并且不需要垃圾回收時使用。啟用命令如下:

    $ java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC

6、Shenandoah 收集器

Shenandoah 是在 JDK12 中引入的,是一種 CPU 密集型垃圾收集器。它會進行內存壓縮,立即刪除無用對象并釋放操作系統的空間。所有的這一切與應用程序線程并行發生。啟用命令如下:

    $ java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC

7、ZGC 收集器

ZGC 為低延遲需要和大量堆空間使用而設計,允許當垃圾回收器運行時 Java 應用程序繼續運行。ZGC 收集器在 JDK11 引入,在 JDK12 改進。在 JDK15,ZGC 和 Shenandoah 都被移出了實驗階段。啟用 ZGC 收集器使用如下命令:

    $ java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC

靈活的垃圾收集器

Java 為我們提供了靈活的內存管理方式,熟悉不同的可用方法有助于為正在開發或運行的應用程序選擇最合適的內存管理方式。

責任編輯:未麗燕 來源: Linux中國
相關推薦

2011-07-21 14:54:26

java垃圾收集器

2023-11-16 08:00:56

Java11G1

2020-02-25 22:01:36

理解JVM垃圾收集器

2009-10-30 10:47:48

VB.NET垃圾收集器

2017-09-21 14:40:06

jvm算法收集器

2011-05-10 16:04:45

Java垃圾收集器

2024-08-26 08:58:50

2024-12-30 08:03:08

2013-12-19 09:46:04

垃圾收集器

2025-05-13 08:20:58

2024-03-27 10:27:35

延遲垃圾收集器

2013-01-07 10:14:06

JavaJava枚舉

2022-04-19 11:25:31

JVMZGC垃圾收集器

2024-05-23 12:40:06

2024-03-14 09:00:00

2015-06-17 14:10:52

OracleJava 9垃圾收集器

2025-01-21 08:00:00

限流微服務算法

2011-12-20 10:43:21

Java

2022-05-10 08:08:01

find命令Linux

2020-01-14 08:00:00

.NET緩存編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产91在线观看 | 欧美日韩成人在线 | 欧美一级黄色片在线观看 | 999视频| 色男人天堂av | 亚洲免费人成在线视频观看 | 亚洲精品久久久久久国产精华液 | 精产国产伦理一二三区 | 涩涩视频在线观看 | 日韩美女爱爱 | 精品国产欧美一区二区三区成人 | 久久久久久久91 | 精品av| 中文字幕乱码一区二区三区 | 欧美一级黄色免费看 | 精品中文字幕一区 | 日干夜操 | 免费在线观看黄网站 | 免费性视频 | 免费在线一区二区三区 | 国产精品一区二区不卡 | 成人不卡一区二区 | 久久se精品一区精品二区 | www.天天操 | 免费国产成人av | 欧美在线视频一区二区 | 狠狠躁躁夜夜躁波多野结依 | 伊人免费在线观看 | 国产精品美女 | 欧美片网站免费 | 久久久久久久久久久久久久国产 | 日本三级在线视频 | 国产精品视频中文字幕 | 四虎影视1304t| 亚洲经典一区 | 亚洲成人精品 | 久久久网| 欧美天堂在线 | 在线观看成人免费视频 | 免费国产视频 | 日韩三级在线 |