码迷,mamicode.com
首页 > 其他好文 > 详细

JVM内存溢出情况

时间:2014-09-16 20:23:11      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   java   ar   div   

    《深入理解java虚拟机》一书中介绍到jvm的内存溢出情况,对理解jvm的自动内存管理机制有一定帮助,下面通过几个实例来进行说明。

     java虚拟机的规范描述中,除了程序计数器外,java堆,虚拟机栈,本地方法区等运行时区都会发生outOfMemoryError的可能。

    《1》java堆溢出

      //eclipse-run configurations-VM arguments-Xms20M -Xmx20M -Xmn10M -XX:+HeapDumpOnOutOfMemoryError

bubuko.com,布布扣
public class HeapOOM
{
    static class OOMObject
    {
        
    }
    public static void main(String[] args)
    {
        List<OOMObject> list=new ArrayList<OOMObject>();
        while(true)
        {
            list.add(new OOMObject());
        }
    }

}
View Code

    《2》虚拟机栈和本地方法栈溢出

     //-Xss128k

     代码一产生的是stackoverflowerror,

     

bubuko.com,布布扣
public class JVMStacks
{
    private int stackLength=1;
    public void stackLeak()
    {
        stackLength++;
        stackLeak();
    }
    public static void main(String[] args)
    {
        JVMStacks  oom=new JVMStacks();
        try
        {
            oom.stackLeak();
        }catch(Throwable e)
        {
            System.out.println(oom.stackLength);
            throw new RuntimeException(e);
        }
    }
}
View Code

    //-Xss2M

    通过代码二可以产生内存溢出异常,但是往往会使你的计算机进入假死状态

bubuko.com,布布扣
public void JAVAStack{
   private void dostop()
{
    while(true){};
}
public void stackLeak()
{
   while(true)
{
  Thread thread =new Thread(new Runnable()
{
  public void run()
{
dostop();
}
});
thread.start();
}
}
public void main(String[] args)
{
JAVAStack  oom=new  JavaStack();
oom.stackLeak();
}
}
View Code

    《3》运行时常量池内存溢出

    //-XX:PermSize=10M  -XX:MaxPermSize=10M

bubuko.com,布布扣
public class RuntimeConstantPool
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        List<String> list=new ArrayList<String>();
        int i=0;
        while(true)
        {
            list.add(String.valueOf(i++).intern());
        }
    }

}
View Code

    《4》本机直接内存溢出

bubuko.com,布布扣
/**
 * VM Args:-Xmx20M -XX:MaxDirectMemorySize=10M
 * @author zzm
 */
public class DirectMemoryOOM {

    private static final int _1MB = 1024 * 1024;

    public static void main(String[] args) throws Exception {
        Field unsafeField = Unsafe.class.getDeclaredFields()[0];
        unsafeField.setAccessible(true);
        Unsafe unsafe = (Unsafe) unsafeField.get(null);
        while (true) {
            unsafe.allocateMemory(_1MB);
        }
    }
}
View Code

 

  

JVM内存溢出情况

标签:style   blog   http   color   io   os   java   ar   div   

原文地址:http://www.cnblogs.com/Bird-Man/p/3975616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!