metaspace默認大小?
在Java8及以后的版本中,我們可以使用以下命令設置元空間的初始大小和最大大小:-XX:MetaspaceSize=N-設置元空間的初始(和最小大小)。-XX: MaxMetaspaceSize=N-設置元空間的最大大小。
什么是元空間Metaspace Size大小?從我們的角度來看,需要注意的是,Metaspace的默認最大大小是無限的。相反,JAVA7及更早版本的PermGen在32位JVM上的默認最大大小為64mb,在64位JVM上為82mb。
Metaspace是否會進行收集垃圾?
一旦類元數(shù)據(jù)使用量達到“MaxMetaspaceSize”,就會觸發(fā)死類和類加載器的垃圾收集。顯然需要對元空間進行適當?shù)谋O(jiān)視和調(diào)優(yōu),以限制此類垃圾收集的頻率或延遲。
什么是Java中的元空間內(nèi)存?
簡單地說,Metaspace是一個新的內(nèi)存空間——從Java8版本開始;它取代了舊的PermGen內(nèi)存空間。最大的區(qū)別在于它如何處理內(nèi)存分配。因此,默認情況下,本機內(nèi)存區(qū)域會自動增長。
Java8中PermGen空間的替代品是什么?
在Java8中,PermGen空間被元空間取代。PermSize和MaxPermSize JVM參數(shù)將被忽略,如果在啟動時出現(xiàn),則會發(fā)出警告。類元數(shù)據(jù)的大多數(shù)分配現(xiàn)在都是從本機內(nèi)存中分配的。
PermGen是永久生成代的縮寫,它是一個特殊的堆空間,它與主Java堆分開,JVM在主堆中跟蹤已加載類的元數(shù)據(jù)。在Java8中,PermGen被重命名為Metaspace—有一些細微的區(qū)別。從我們的角度來看,需要注意的是Metaspace有一個無限制的默認最大大小。相反,java7及更早版本的PermGen在32位JVM上的默認最大大小為64mb,在64位版本上為82mb。當然,這些不同于初始尺寸。Java7和更早版本的初始PermGen空間大約為12-21MB。
值得一提的是,在Java7之前,內(nèi)部字符串通常保存在PermGen上。
這會導致 java.lang.OutOfMemoryError:永久代內(nèi)存溢出
無論何時需要調(diào)整PermGen/Metaspace的大小,JVM都會像對待標準堆一樣進行調(diào)整。調(diào)整這些空間的大小需要一個完整的GC,這通常是一個昂貴的操作。它通常可以在啟動時觀察到,當許多類被加載時。尤其是當應用程序依賴于許多外部庫時。如果在啟動過程中有很多完整的gc,通常就是因為這個。在這種情況下,增加初始大小可以提高啟動性能。
要增加PermGen,我們有以下命令:
-XX: PermSize=N-設置永久生成空間的初始(和最小大小)。
-XX: MaxPermSize=N-設置永久生成空間的最大大小。
在Java 8及更高版本中,我們可以使用以下命令設置元空間的初始大小和最大大小:
-XX: MetaspaceSize=N-設置元空間的初始(和最小大小)。
-XX: MaxMetaspaceSize=N-設置元空間的最大大小。
對于與Java進程在內(nèi)存空間中使用的區(qū)域相關的大小調(diào)整,需要考慮以下幾個方面。
Java堆:管理Java對象的空間
元空間:管理類信息的空間
其他空間:堆棧空間,以及java vm和本機方法使用的C堆空間
可以使用以下兩種方法來調(diào)整上述空間的大小:
注意:
如果上面計算的元空間的最大大小小于64 MB,則該空間的最大大小將設置為64 MB。Java堆和其他空間的最大大小計算如下:將((MaxSizeFallSpaces-100MB)-64 MB)的結果分配給Java堆和其他空間,比例分別為75%和15%。
如果在Java操作環(huán)境變量中指定了設置最大大小的Java選項(無論是-Xmx還是-XX:MaxMetaspaceSize),則根據(jù)“使用Java\OPTS環(huán)境變量指定”中描述的方法確定每個空間的最大大小。
在具有高多重性的請求或具有深調(diào)用堆棧的方法的情況下,如果進程輸出下面的消息并失敗,則表示超出容器中的最大內(nèi)存值,因此需要在“指定使用JAVA\OPTS環(huán)境變量”中描述的調(diào)優(yōu)。
exit_description: out of memory, exit_status: 143
使用JAVA_OPTS環(huán)境變量指定Metaspace默認大小
指定一個Java選項,該選項設置Java_OPTS環(huán)境變量中每個空間的大小。
估計每個空間所需的最大大小,并使用Java選項進行設置,以使空間的總大小不超過(maxSizeOfAllSpaces(默認為1gb)-300mb的結果)(請參閱注1)。300 MB被分配給管理Java應用程序進程的空間。
用戶應該驗證并負責選擇正確的Java選項,而不是Java選項中的-Xmx和-XX:MaxMetaspaceSize。
注意:
請參閱下表,并確保空間的最大大小總和不超過(maxSizeOfAllSpaces(默認為1 GB)-300 MB)的結果。不要省略表中的兩個Java選項,因為如果省略了指定最大大小的Java選項,java VM會自動確定最大大小。
對于剩余的空間,從(maxSizeOfAllSpaces減去maxJavaHeapSize和maxMetaspaceSize的總和-300 MB)沒有Java選項來配置其他空間。
字節(jié)大小可以用-Xmx和-XX:MaxMetaspaceSize指定。以下字符可以指定為單位:
對于KB(千字節(jié)):“k”或“k”
對于MB(兆字節(jié)):“m”或“m”
對于GB(GB):“g”或“g”