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

JVM 內存架構和 GC 算法基礎

開發 架構
Java 垃圾收集器不能確保堆內存完全空閑,而且對于開發人員來說,不可能強制垃圾收集器在特定時間運行。因此,了解 Java 中的內存管理是如何工作的對開發程序會很有幫助。

目的

本文討論了 JDK8 及更高版本的堆內存和棧內存管理的基本概念。以及 GC 及其算法的基礎知識。

內存管理的重要性

Java 垃圾收集器不能確保堆內存完全空閑,而且對于開發人員來說,不可能強制垃圾收集器在特定時間運行。因此,了解 Java 中的內存管理是如何工作的對開發程序會很有幫助。

了解內存管理有助于編寫優化的內存效率代碼,并有助于避免程序中任何與內存相關的問題,這些問題可能導致應用程序運行緩慢,并有助于避免 StackOverFlowError 和 OutOfMemoryError 等錯誤。

棧內存

棧是一種線性數據結構,是 Java 分配的靜態內存,用于存儲堆對象引用,也存儲 Java 原始類型值。棧以后進先出 (LIFO) 順序訪問內存,并且棧比堆內存快。

每個線程在內存中創建自己的棧,這反過來又使棧內存線程安全。

Java 中的方法僅訪問方法體(方法范圍內)內的棧內存中的對象。當方法執行完成時,該方法對應的塊會從棧中清除。

在上面的程序中,我們可以看到,當控件到達main方法時,棧中會有一個args的入口。然后當控件在下一行時,一個新條目被添加到棧中。

當控件超出方法的范圍時,引用將從棧中刪除。

如果棧內存已滿,JVM 會拋出 StackOverFlowError。

堆內存

堆用于JVM在運行時為Java對象動態分配內存。任何新對象都存儲在堆中,并且對象的引用(示例變量)存儲在棧中。您可以在下面的示例中看到示例代碼的變量如何存儲在堆和堆棧中。

下面是上述代碼片段在堆中的內存分配。

堆內存可以分解成更小的部分,稱為代,它們是年輕代、年老/終身代和永久代。

年輕一代

所有新對象都在此內存段中分配。 年輕代由 Eden 和兩個 Survivor 空間組成。當 Eden 填滿時,垃圾收集發生在年輕代上,這稱為 Minor GC。在 Minor GC 期間,來自年輕代的引用對象被移動到 Survivor 空間 #1,并且對象的年齡增加。

例如,在下圖中,“對象 1”和“對象 2”將在第一次 Minor GC 之后移動到 Survivor 空間 #1,并且它們將具有指定的年齡。如果“對象 1”在第一次 Minor GC 中幸存下來,則年齡為零。現在如果“對象 1”在下一次 Minor GC 中也幸存下來,那么它將被移動到幸存者空間 2,并且年齡將再次增加。

在第二次 Minor GC 期間,駐留在 Survivor 空間 #1 中的對象(具有引用)將被移動到 Survivor #2,并且年齡將增加(即根據示例年齡將從零變為一)。并且從完整的年輕代空間中所有未引用的對象都將被刪除。

老一代

老年代是存放長壽命對象(最老的對象)的地方。 年輕代對象有年齡的上限或閾值。 一旦對象達到該上限,則該對象將移至老一代或終身代。

終身代

這部分堆內存用于存儲運行時類和方法的元數據。 從 JDK 8 開始,這部分內存已被 Java 完全刪除,并被 Metaspace 概念所取代。您仍然可以設置 --XX:PermSize 和 -XX:MaxPermSize 配置。但是,如果您在 JDK 8 或更高版本上運行應用程序,則會在運行時收到警告。

元空間

這是從 JDK 8 版本開始引入的,它是一個可調整大小的內存區域并從本機內存中分配。元空間保存類元數據,它不是一個連續的內存位置。

每當 Metaspace 達到為 Metaspace 分配的最大大小時,Java 就會觸發自動 GC 以釋放 Metaspace 內存。

元空間選項是 -XX:MetaspaceSize=size 和 -XX:MaxMetaspaceSize=size

垃圾收集

Java程序編譯并更改為字節碼并在JVM(Java虛擬機)上運行。Java 程序的對象是在該程序的專用堆內存上創建的。隨著時間的推移,會創建更多對象,并且程序不再需要一些對象(未引用和取消范圍)。垃圾回收是 Java 執行自動內存管理并通過刪除未引用對象來釋放內存空間的過程。

JVM 結合了不同的垃圾收集算法。垃圾收集算法檢查內存中的每個引用對象,其余對象被視為垃圾收集。

GC算法的類型

以下是 JVM 可用的 4 種類型的 GC 算法。

  • 并行GC
  • 串行GC
  • 并發標記和掃描
  • G1 垃圾優先

并行GC

專為具有中等或大量數據的多線程應用程序而設計,在多處理器環境中運行良好。但它會在垃圾收集期間凍結所有應用程序線程。 JVM 選項是 -XX:+UseParallelGC ,您可以選擇使用 -XX:ParallelGCThreads= 設置并行線程數。

串行GC

主要設計用于單線程環境。 Liek Parallel GC,它還會在垃圾收集期間凍結所有應用程序線程。JVM 選項是 -XX:+UseSerialGC。

并發標記和滲漏(CMS)

這是一個并發 GC,旨在縮短 GC 暫停時間,并且不需要停止正在運行的應用程序來執行 GC。這就是為什么這個過程比串行或并行 GC 慢的原因。

它使用多線程進行垃圾收集,并且可以與垃圾收集器共享處理器資源。JVM 選項是 -XX:+UseConcMarkSweepGC。

G1 垃圾收集器(G1GC)

這是另一種最高效的并發 GC,專為具有大量內存的多處理器環境而設計。JVM 選項是 -XX:+UseG1GC。

選擇 GC 算法的參數

除非您對 GC 時間有特定要求并且需要放置其他規范,否則最好讓 JVM 自己選擇 GC 算法。

如果要選擇和配置 GC 算法,那么需要考慮的參數很少,如堆大小、CPU 核心數、應用程序數據集體積、吞吐量、暫停時間、延遲。

a、堆大小 - 分配給 JVM 的內存總量。更大的堆大小意味著 GC 將花費更多時間。更大的堆內存意味著與更少的堆內存相比,JVM 觸發 GC 的頻率不會那么頻繁。JVM 選項是 -Xms=和 -Xmx=,其中 -Xms 表示最小值,-Xmx 是最大值。

b、CPU 核心 - GC 算法因 CPU 核心數量而異。其中一些是為單核 CPU 設計的,一些是為多核 CPU 設計的。

c、應用程序數據集 - 這是指應用程序使用的對象數量。創建更多數量的新對象,導致填充年輕代空間,需要更多的 GC 時間來釋放內存。

d、吞吐量 - 它是完成應用程序任務所需的總時間(GC 外)的百分比。它與分配給 JVM 的內存成反比。

e、暫停時間 - GC 算法在內存回收期間停止應用程序所花費的時間。它根據不同的GC算法而有所不同。JVM 選項是 -XX:MaxGCPauseMillis=

f、延遲 - 它是應用程序的響應時間,直接取決于 GC 暫停時間。

根據上述參數,您必須選擇最適合您的應用的 GC 算法。例如:

  • ·如果應用程序很小并且使用較小的數據集并且在沒有暫停時間要求的單處理器上運行,則串行 GC。
  • 如果應用程序性能是最高優先級,則并行 GC。
  • ·當應用程序的響應時間很重要時,G1GC 或 CMS 因為它在運行 GC 時不會保留應用程序。

原文鏈接:https://dzone.com/articles/jvm-memory-architecture-and-gc

責任編輯:武曉燕 來源: 新鈦云服
相關推薦

2019-12-10 08:59:55

JVM內存算法

2012-01-11 11:07:04

JavaJVM

2012-01-11 10:45:57

JavaJVM

2019-09-02 14:53:53

JVM內存布局GC

2023-12-07 12:21:04

GCJVM垃圾

2017-09-21 14:40:06

jvm算法收集器

2010-09-26 11:22:22

JVM垃圾回收JVM

2021-04-14 10:14:34

JVM生產問題定位內存泄露

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2020-07-29 14:15:04

JavaJvm算法

2017-09-26 16:32:03

JavaGC分析

2021-04-12 09:36:14

JVM生產問題JVM FULL GC

2020-09-10 14:52:01

JVMJava算法

2022-12-28 08:52:15

編譯器自動內存管理

2012-01-11 13:04:40

JavaJVM

2017-09-20 08:48:09

JVM內存結構

2009-07-08 15:11:58

JVM GC調整優化

2015-08-20 11:01:22

Java虛擬機GC算法種類

2023-08-24 07:46:21

服務器JVM

2023-11-19 23:29:22

Heap DumpJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区亚洲午夜久久久 | 亚洲精品国产成人 | 亚洲天堂一区 | 91亚洲精品久久久电影 | 久久蜜桃精品 | 亚洲免费在线 | 91精品国产91久久久久久最新 | 免费毛片网站在线观看 | 亚洲啊v在线 | 久久在视频 | 亚洲高清在线 | 成人综合视频在线观看 | 欧美性a视频 | 亚洲精品乱码久久久久久9色 | 中文字幕一区二区三区在线视频 | 日本福利一区 | 欧美日韩高清免费 | 亚洲欧洲成人av每日更新 | 秋霞在线一区二区 | 亚洲一区不卡在线 | 国产高清视频一区 | 精品欧美一区二区在线观看 | 欧美1级| 在线观看av免费 | 99精品一区二区三区 | 一区二区三区影院 | 国产精品久久久久久久久 | 国产精品美女在线观看 | 日韩精品一区二区三区免费观看 | 欧美日韩淫片 | 日韩国产一区二区三区 | 国产日韩亚洲欧美 | 日韩高清国产一区在线 | 日韩福利在线 | 99精品视频免费观看 | 日韩高清在线 | 日韩精品久久久久久 | 一区二区视屏 | 欧美一级一区 | 精品99久久久久久 | 蜜桃传媒一区二区 |