40.JVM方法区(元空间)大小设置(-XX:MetaspaceSize和-XX:MaxMetaspaceSize)
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问题?(了解)
下面的内容先了解一些。