在JVM中,可以使用一些参数来设置Metaspace的大小。下面是一些常用的参数: -XX:MetaspaceSize:用于设置Metaspace的初始大小,默认值为21M -XX:MaxMetaspaceSize:用于设置Metaspace的最大大小,默认值为无限制 -XX:MinMetaspaceFreeRatio:用于设置Metaspace中仍可使用的空间比例,默认为40 -XX:MaxMetaspaceFreeRatio:用于设置Met...
前段时间公司线上环境的一个Java应用因为OOM的异常报警,导致整个服务不可用被拉出集群,本地模拟重现的现象如下: 当时的解决方案是增加metaspace的容量:-XX:MaxMetaspaceSize=500m,从原来默认的256m改为500m,虽然没有再出现oom,但这个只是临时解决方案,通过公司的监控系统观察metaspace的使用情况还是在上升,而且后面随着...
例如,设置永久代的最大大小为256MB: java-XX:MaxPermSize=256m... 该参数适用于较旧的Java版本(Java 7及其更早版本),对于Java 8及其更高版本,建议使用-XX:MaxMetaspaceSize参数来配置Metaspace的最大值。 其他相关参数:除了上述提到的参数外,还有一些与Metaspace相关的其他参数可以进一步调整Metaspace的性能和大小。
Metaspace由于使用不断扩容到-XX:MetaspaceSize参数指定的量,就会发生FGC;且之后每次Metaspace扩容都会发生FGC; 如果Old区配置CMS垃圾回收,那么扩容引起的FGC也会使用CMS算法进行回收; 如果MaxMetaspaceSize设置太小,可能会导致频繁FGC,甚至OOM; 任何一个JVM参数的默认值可以通过java -XX:+PrintFlagsFinal -version |grep...
MaxMetaspaceSize用于设置metaspace区域的最大值,这个值可以通过mxbean中的MemoryPoolBean获取到,如果这个参数没有设置,那么就是通过mxbean拿到的最大值是-1,表示无穷大。 由于调整元空间的大小需要Full GC,这是非常昂贵的操作,如果应用在启动的时候发生大量Full GC,通常都是由于永久代或元空间发生了大小调整,基于...
MetaspaceSize表示metaspace首次使用不够而触发FGC的阈值,只对触发起作用,原因是:垃圾搜集器内部是根据变量 _capacity_until_GC来判断metaspace区域是否达到阈值的,初始化代码如下所示: 代码语言:javascript 复制 voidMetaspaceGC::initialize(){// Set the high-water mark to MaxMetapaceSize during VM initializaton ...
Metaspace由于使用不断扩容到-XX:MetaspaceSize参数指定的量,就会发生FGC;且之后每次Metaspace扩容都可能会发生FGC(至于什么时候会,比较复杂,跟几个参数有关); 如果Old区配置CMS垃圾回收,那么扩容引起的FGC也会使用CMS算法进行回收; 如果MaxMetaspaceSize设置太小,可能会导致频繁FullGC,甚至OOM; ...
jdk1.8以下:-Xms4096m -Xmx4096m -XX:MaxPermSize=512m jdk1.8及以上:-Xms4096m -Xmx4096m -XX:MaxMetaspaceSize=512m 线程共享: Java 堆、方法区;线程私有:虚拟机栈、本地方法栈,程序计数器一小部分内存。 1、JVM堆: 堆内存(Heapmemory) 1 )堆是所有线程共享的,主要是存放类 /对象实例和数组。处于物...
或许从JVM代码里也能看出一些端倪来,比如MaxMetaspaceSize默认值很大,CompressedClassSpaceSize默认也有1G,从这些参数我们能猜到metaspace的作者不希望出现它相关的OOM问题。 metaspace的组成 metaspace其实由两大部分组成 Klass Metaspace NoKlass Metaspace Klass Metaspace就是用来存klass的,klass是我们熟知的class文件在jvm里...