天天看點

JVM中init、used、committed、max參數與實體和虛拟記憶體的關系

作者:微風01
JVM中init、used、committed、max參數與實體和虛拟記憶體的關系

在Java虛拟機(JVM)中,init、used、committed和max是與記憶體管理相關的參數,它們與實體記憶體和虛拟記憶體有一定的關系。

JVM記憶體:

JVM記憶體是指Java虛拟機(JVM)程序在運作Java程式時所使用的記憶體空間。

JVM記憶體主要分為幾個部分:

  1. 堆(Heap):用于存儲Java對象執行個體的記憶體區域,由JVM自動管理,包括新生代和老年代等不同區域。
  2. 棧(Stack):用于存儲方法的調用棧幀、局部變量和操作數棧等資訊,由JVM自動管理。
  3. 方法區(Method Area):用于存儲類的元資訊、靜态變量、常量池等資訊,也由JVM自動管理。
  4. 本地方法棧(Native Method Stack):用于存儲JNI(Java Native Interface)調用的本地方法資訊。

JVM堆記憶體參數:

  1. init:表示JVM在啟動時為堆記憶體配置設定的初始大小。這個值通常由JVM自動設定,取決于作業系統和硬體的配置。
  2. used:表示JVM目前已經使用的堆記憶體大小。随着程式的運作,堆記憶體中會被建立和回收對象,used的值會動态變化。
  3. committed:表示JVM目前已經申請并保證可以使用的堆記憶體大小。與used不同,committed包括了已經被使用的記憶體和未使用的記憶體,但這部分記憶體已經被保證可用,不會被其他程序搶占。
  4. max:表示JVM允許堆記憶體達到的最大大小。如果程式在運作過程中需要更多的記憶體,JVM會嘗試自動擴充堆記憶體大小,但不能超過max的設定值。

實體記憶體:

實體記憶體是計算機硬體中實際存在的記憶體,也稱為主存儲器(Main Memory)。它是計算機中用于存儲程式和資料的實體存儲媒體,由RAM(随機通路存儲器)組成。作業系統直接管理實體記憶體的配置設定和釋放,将其分割成固定大小的記憶體塊,供各個程序使用。

虛拟記憶體:

虛拟記憶體是作業系統提供給程序的一種抽象概念,它是在實體記憶體和磁盤之間的一層抽象,用于将程序所需的記憶體空間映射到實體記憶體或者磁盤上。虛拟記憶體使得每個程序都擁有獨立的位址空間,使得程序之間互相隔離,不會互相幹擾。每個程序認為自己擁有整個虛拟記憶體空間,而實際上隻有部分資料和指令被加載到實體記憶體中,其餘部分存儲在磁盤上。當程序通路虛拟記憶體中的資料時,作業系統會将資料從磁盤中加載到實體記憶體中,如果實體記憶體不夠用,則會通過頁交換技術将不常用的資料交換到磁盤上釋放出空間。

JVM中init、used、committed、max參數與實體和虛拟記憶體的關系

JVM記憶體與實體記憶體和虛拟記憶體的關系:

  • 實體記憶體:實體記憶體是計算機實際存在的記憶體資源,用于存儲作業系統和正在運作的程序的資料。JVM運作在作業系統上,它的堆記憶體是從實體記憶體中配置設定的。
  • 虛拟記憶體:虛拟記憶體是由作業系統提供的一種機制,它使得每個程序都能在有限的實體記憶體資源下運作。作業系統會将虛拟記憶體映射到實體記憶體,使得程序感覺自己擁有更大的記憶體空間。JVM的記憶體管理也受到虛拟記憶體的限制,因為JVM運作在虛拟記憶體空間中。

JVM的堆記憶體參數(init、used、committed、max)通常都是限制在虛拟記憶體空間中的,并不直接控制實體記憶體的使用。JVM通過請求作業系統配置設定虛拟記憶體,并根據需要将虛拟記憶體映射到實體記憶體。如果JVM的堆記憶體大小超過了實體記憶體的容量,作業系統會使用虛拟記憶體技術來交換記憶體中的資料,使得程序可以繼續運作。但是,虛拟記憶體交換會導緻性能下降,是以應該合理設定JVM的堆記憶體參數,避免過度消耗虛拟記憶體和頻繁的記憶體交換。

JVM記憶體、實體記憶體和虛拟記憶體的關系:

JVM記憶體是Java虛拟機運作Java程式時使用的記憶體空間,由JVM自動管理。JVM記憶體所在的程序在作業系統中也會占用一部分實體記憶體。而虛拟記憶體是作業系統提供給每個程序的獨立位址空間,包括實體記憶體和磁盤上的交換空間。在JVM運作Java程式時,它會在作業系統提供的虛拟記憶體中配置設定堆、棧、方法區等記憶體區域。虛拟記憶體使得每個程序都有獨立的位址空間,不會互相幹擾,而作業系統負責将虛拟記憶體映射到實體記憶體和磁盤上。這樣,即使實體記憶體不足,程序也能正常運作,但可能會導緻性能下降和交換開銷增加。是以,在調優Java應用程式時,需要關注JVM記憶體配置和實體記憶體的使用情況,以避免出現記憶體不足或交換開銷過大的問題。

JVM中init、used、committed、max參數與實體和虛拟記憶體的關系

延伸閱讀:

深入了解Java的GC原理,掌握JVM 性能調優!

Java中map多少種周遊方式以及周遊的方式的優缺點

繼續閱讀