栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM实战:哪些区域会发生内存溢出?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM实战:哪些区域会发生内存溢出?

内存溢出

元空间
public class metaspaceOom {

    // -XX:metaspaceSize=10m -XX:MaxmetaspaceSize=10m
    public static void main(String[] args) {

        long counter = 0;

        while (true) {
            Enhancer enhancer = new Enhancer();
            enhancer.setSuperclass(Car.class);
            enhancer.setUseCache(false);
            enhancer.setCallback(new MethodInterceptor() {
                @Override
                public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                    if (method.getName().equals("run")) {
                        System.out.println("启动汽车之前先进行安全检查");
                        return methodProxy.invokeSuper(o, objects);
                    } else {
                        return methodProxy.invokeSuper(o, objects);
                    }
                }
            });

            Car car = (Car) enhancer.create();
            car.run();

            System.out.println("创建了 " + (++counter) + " 个子类");
        }
    }

    static class Car {
        public void run() {
            System.out.println("汽车启动,开始行驶");
        }
    }
}
Caused by: java.lang.OutOfMemoryError: metaspace
	at java.lang.ClassLoader.defineClass1(Native Method)
虚拟机栈
public class StackOom {

    private static int stackLength = 0;

    // -Xss1M
    public static void main(String[] args) {
        StackOom stackOom = new StackOom();
        try {
            stackOom.invoke();
        } catch (Throwable e) {
            System.out.println("stack length: " + stackLength);
            throw e;
        }
    }

    public void invoke() {
        stackLength++;
        invoke();
    }
}
Exception in thread "main" java.lang.StackOverflowError
	at com.javashitang.oomKind.StackOom.invoke(StackOom.java:24)
堆内存
public class HeapOom {

    private static final int _1MB = 1024 * 1024;

    // -Xms20m -Xmx20m
    public static void main(String[] args) {
        List list = Lists.newArrayList();
        while (true) {
            list.add(new byte[_1MB]);
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at com.javashitang.oomKind.HeapOom.main(HeapOom.java:19)
堆外内存
public class DirectMemoryOom {

    private static final int _1MB = 1024 * 1024;

    // -XX:MaxDirectMemorySize=2m
    public static void main(String[] args) {
        ByteBuffer.allocateDirect(3 * _1MB);
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
	at java.nio.Bits.reserveMemory(Bits.java:694)
	at java.nio.DirectByteBuffer.(DirectByteBuffer.java:123)
	at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
	at com.javashitang.oomKind.DirectMemoryOom.main(DirectMemoryOom.java:15)
参考博客
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770073.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号