jdk1.8 取消了PermGen,取而代之的是Metaspace (元空间)
Metaspace使用的是本地内存不是堆内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关。
可以通过以下参数来指定元空间的大小:
-XX:MetaspaceSize 初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize 最大使用空间,防止Metaspace无限的使用本地内存,默认是没有限制的。
-XX:MaxMetaspaceExpansion Metaspace增长时的最大幅度。在本机上该参数的默认值为5452592B(大约为5MB)。
-XX:MinMetaspaceExpansion Metaspace增长时的最小幅度。在本机上该参数的默认值为340784B(大约330KB为)。
还有两个与 GC 相关的属性:
-XX:MinMetaspaceFreeRatio,当进行过Metaspace GC之后,会计算当前Metaspace的空闲空间比,如果空闲比小于这个参数,那么虚拟机将增长Metaspace的大小。在本机该参数的默认值为40,也就是40%。设置该参数可以控制Metaspace的增长的速度,太小的值会导致Metaspace增长的缓慢,Metaspace的使用逐渐趋于饱和,可能会影响之后类的加载。而太大的值会导致Metaspace增长的过快,浪费内存。
-XX:MaxMetaspaceFreeRatio 当进行过Metaspace GC之后, 会计算当前Metaspace的空闲空间比,如果空闲比大于这个参数,那么虚拟机会释放Metaspace的部分空间。
查看默认配置大小:
$ java -XX:+PrintFlagsInitial | grep Metaspace
uintx InitialBootClassLoaderMetaspaceSize = 4194304 {product}
uintx MaxMetaspaceExpansion = 5452592 {product}
uintx MaxMetaspaceFreeRatio = 70 {product}
uintx MaxMetaspaceSize = 18446744073709551615 {product} #很大,已经超过机器内存
uintx MetaspaceSize = 21810376 {pd product} #20m左右
uintx MinMetaspaceExpansion = 340784 {product}
uintx MinMetaspaceFreeRatio = 40 {product}
bool UseLargePagesInMetaspace = false {product}
Metaspace使用的是本地内存不是堆内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关。
可以通过以下参数来指定元空间的大小:
-XX:MetaspaceSize 初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize 最大使用空间,防止Metaspace无限的使用本地内存,默认是没有限制的。
-XX:MaxMetaspaceExpansion Metaspace增长时的最大幅度。在本机上该参数的默认值为5452592B(大约为5MB)。
-XX:MinMetaspaceExpansion Metaspace增长时的最小幅度。在本机上该参数的默认值为340784B(大约330KB为)。
还有两个与 GC 相关的属性:
-XX:MinMetaspaceFreeRatio,当进行过Metaspace GC之后,会计算当前Metaspace的空闲空间比,如果空闲比小于这个参数,那么虚拟机将增长Metaspace的大小。在本机该参数的默认值为40,也就是40%。设置该参数可以控制Metaspace的增长的速度,太小的值会导致Metaspace增长的缓慢,Metaspace的使用逐渐趋于饱和,可能会影响之后类的加载。而太大的值会导致Metaspace增长的过快,浪费内存。
-XX:MaxMetaspaceFreeRatio 当进行过Metaspace GC之后, 会计算当前Metaspace的空闲空间比,如果空闲比大于这个参数,那么虚拟机会释放Metaspace的部分空间。
查看默认配置大小:
$ java -XX:+PrintFlagsInitial | grep Metaspace
uintx InitialBootClassLoaderMetaspaceSize = 4194304 {product}
uintx MaxMetaspaceExpansion = 5452592 {product}
uintx MaxMetaspaceFreeRatio = 70 {product}
uintx MaxMetaspaceSize = 18446744073709551615 {product} #很大,已经超过机器内存
uintx MetaspaceSize = 21810376 {pd product} #20m左右
uintx MinMetaspaceExpansion = 340784 {product}
uintx MinMetaspaceFreeRatio = 40 {product}
bool UseLargePagesInMetaspace = false {product}