1.方法區內存大小設置
1.方法區的大小可以不是固定的,JVM可以根據應用需要自動調整。
a)JDK7及以前(了解):-XX:PermSize設置永久代初始大小。-XX:MaxPermSize設置永久代最大可分配空間。(JDK7目前已經很少用了,這兩個參數在JDK8及以后已經沒有了,所以不必掌握,了解一下)
b) JDK8及以后:可以使用-XX:MetaspaceSize和-XX:MaxMetaspaceSize設置元空間初始大小以及最大可分配大小。
例子:設置初始大小是100M,最大可分配空間也是100M。-XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=100m。
1.如果不指定元空間的大小,默認情況下,元空間最大的大小是系統內存的大小,元空間一直擴大,虛擬機可能會消耗完所有的可用系統內存。
2.如果元空間內存不夠用,就會報OOM。
3.默認情況下,對應一個64位的服務端JVM來說,其默認的-XX:MetaspaceSize值為21MB,這就是初始的高水位線,一旦元空間的大小觸及這個高水位線,就會觸發Full GC並會卸載沒有用的類,然后高水位線的值將會被重置。
4.從第3點可以知道,如果初始化的高水位線設置過低,會頻繁的觸發Full GC,高水位線會被多次調整。所以為了避免頻繁GC以及調整高水位線,建議將-XX:MetaspaceSize設置為較高的值,而-XX:MaxMetaspaceSize不進行設置。
2.如何解決OOM問題?(了解)
下面的內容先了解一些。
