zoukankan      html  css  js  c++  java
  • java代码实现JVM栈溢出,堆溢出

    参考博客:http://www.cnblogs.com/tv151579/p/3647238.html
    背景知识:

    1. 栈存放什么:栈存储运行时声明的变量——对象引用(或基础类型, primitive)内存空间, 栈的实现是先入后出的。
    2. 堆存放什么:堆分配每一个对象内容(实例)内存空间。
    3. 栈溢出:java.lang.StackOverflowError
    4. 堆溢出:java.lang.OutOfMemoryError: Java heap space
    5. 栈溢出实现,可以递归调用方法,这样随着栈深度的增加,JVM 维持着一条长长的方法调用轨迹。
    6. 堆溢出实现,可以循环创建对象或大的对象

    直到内存不够分配,产生栈溢出。

    一、栈溢出

    两种情况:

    1. 线程请求的栈深度大于虚拟机允许的最大深度 StackOverflowError
    2. 虚拟机在扩展栈深度时,无法申请到足够的内存空间 OutOfMemoryError

    二、堆溢出

    创建对象时如果没有可以分配的堆内存,就会出现堆溢出。

    三、 两者实例如下:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
    
    public class testCode {
        public void testHeap(){//堆溢出
            List<byte[]> list = new ArrayList<>();
            int i=0;
            while (true){
                list.add(new byte[5*1024*1024]);
                System.out.println("count is: "+(++i));
            }
        }
        int num = 1;
        public void testStack(){ //栈溢出
            num++;
            this.testStack();
        }
        public static void main(String[] agrs){
           testCode t = new testCode();
            t.testHeap();
            t.testStack();
        }
    }
    

     

    运行结果:

    //堆溢出:
    count is: 343
    count is: 344
    count is: 345
    count is: 346
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at testCode.testHeap(testCode.java:14)
        at testCode.main(testCode.java:25)
    //栈溢出:
    StackOverflowError
    • 1
    • 2

    另外,Java虚拟机的堆大小如何设置:命令行

     java –Xms128m //JVM占用最小内存

           –Xmx512m //JVM占用最大内存
    
           –XX:PermSize=64m //最小堆大小
    
           –XX:MaxPermSize=128m //最大堆大小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    出现溢出解决方案:http://outofmemory.cn/c/java-outOfMemoryError

  • 相关阅读:
    POJ 3279 Fliptile
    FZU 2143 Board Game
    【HDU 5015】233 Matrix
    【BZOJ 2463】 谁能赢呢?
    【POJ 2311】 Cutting Game
    【HDU 1846】 Brave Game
    【HDU 1847】 Good Luck in CET-4 Everybody!
    【Codeforces 258D】 Count Good Substrings
    【Codeforces 258B】 Sort the Array
    【Codeforces 258A】 Game With Sticks
  • 原文地址:https://www.cnblogs.com/AndyAo/p/8127026.html
Copyright © 2011-2022 走看看