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問題?(瞭解)
下面的內容先了解一些。
更多JVM文章請訪問我的JVM專欄:
https://blog.csdn.net/u011069294/category_10113093.html