JVM(完成度95%,不断更新) (16)

image.png


MetaSpace

元空间内存不足,Matespace元空间应用的是本地内存
-XX:MetaspaceSize 的处理化大小为20M

#### 元空间是什么 元空间就是我们的方法区的实现,存放的是类模板,类信息,常量池等 Metaspace是方法区HotSpot中的实现,它与持久代最大的区别在于:Metaspace并不在虚拟内存中,而是使用本地内存, 也即在java8中,class metadata(the virtual machines internal presentation of Java class), 被存储在叫做Matespace的native memory 永久代(java8后背元空间Metaspace取代了)存放了以下信息: - 虚拟机加载的类信息 - 常量池 - 静态变量 - 即时编译后的代码 模拟Metaspace空间溢出,我们不断生成类 往元空间里灌输,类占据的空间总会超过Metaspace指定的空间大小 为了更快的达到效果,我们首先需要设置JVM启动参数 -XX:MetaspaceSize=8m -XX:MaxMetaspaceSize=8m public class MetaspaceOutOfMemoryDemo { // 静态类 static class OOMTest { } public static void main(final String[] args) { // 模拟计数多少次以后发生异常 int i =0; try { while (true) { i++; // 使用Spring的动态字节码技术 Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(OOMTest.class); enhancer.setUseCache(false); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { return methodProxy.invokeSuper(o, args); } }); } } catch (Exception e) { System.out.println("发生异常的次数:" + i); e.printStackTrace(); } finally { } } } ------------------ 报错: 发生异常的次数: 201 java.lang.OutOfMemoryError:Metaspace

十四、性能监控分析、线上问题定位处理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsdps.html