1JVM内存四大类型问题:Heap、Stack、Contant、DirectMemory

原创 2016年05月30日 14:27:35

第一 heap 堆溢出:

heap中只能保存对象,对象存储过多会报错 java heap space

测试时修改JVM的默认参数:


 代码:

import java.util.ArrayList;
import java.util.List;


class Person{ }


public class HelloHeapOutOfMemory {

public static void main(String[] args) {
System.out.println("HelloHeapOutOfMemory");
List<Person> persons = new ArrayList<Person>();
int counter = 0;
      while(true){
      persons.add(new Person());
      System.out.println("Instance: " + (++counter));
      }


}


}

结果:10M空间在存储36W个空对象后报错;



第二:stack是线程私有,在主线程中运行其他线程会报错:stackOverFlowError

代码:

package com.dt.spark.jvm.basics;


public class HelloStackOverFlow {
private int counter;


  


    public void count() {


       counter++;


       count();


    }


public static void main(String[] args) {
System.out.println("HelloStackOverFlow");


HelloStackOverFlow helloStackOverFlow = new HelloStackOverFlow();
try {
helloStackOverFlow.count();
} catch (Exception e) {
e.printStackTrace();
throw e;
}

}


}

结果:


3.ConstantOutOfMemory 当常量里面存储内容超出存储空间时会报错 GC overhead limit exceeded

测试代码:


package com.dt.spark.jvm.basics;


import java.util.ArrayList;
import java.util.List;


public class HelloConstantOutOfMemory {


public static void main(String[] args) {
try {


          List<String> stringList = new ArrayList<String>();


          int item = 0;


          while(true){


             stringList.add(String.valueOf(item++).intern());


          }


      } catch (Exception e) {


          e.printStackTrace();


          throw e;


      }


}


}


结果:


4.java.lang.OutOfMemoryError: Direct buffer memory

代码:

package com.dt.spark.jvm.basics;


import java.nio.ByteBuffer;


public class HelloDirectMemoryOutOfmemory {
private static final int ONE_GB = 1024*1024*1024;


private static int count = 1;


public static void main(String[] args) {
 try {           


          while (true) {


             ByteBuffer buffer = ByteBuffer.allocateDirect(ONE_GB);


             count++;


          }


      } catch (Exception e) {


          System.out.println("Exception:instance created "+count);


          e.printStackTrace();


      } catch (Error e) {


          System.out.println("Error:instance created "+count);


          e.printStackTrace();


      }
}


}

结果:


注意:测试时,把jvm的临时改为-verbose:gc -Xms10M -Xmx10M -Xss128k -XX:+PrintGCDetails

版权声明: 举报

相关文章推荐

实战演示JVM内存四大类型问题:Heap、Stack、Contant、DirectMemory等

如图演示

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

 这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有 比较大的帮助。 废话不想讲了.入主题: 先了解具体的概念: JAVA的JVM...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

JVM 内存 (堆(heap)、栈(stack)和方法区(method) )

转自:http://www.cnblogs.com/dingyingsi/p/3760730.html 这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运...

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有 比较大的帮助。 废话不想讲了.入主题: 先了解具体的概念: JAVA的JVM的内存可分为...

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

先了解具体的概念: JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。...

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有 比较大的帮助。 废话不想讲了.入主题: 先了解具体的概念: JAVA的JVM的内存可分为...

JVM 内存 (堆(heap)、栈(stack)和方法区(method) )

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

JVM内存格局总结:stack/heap/static/code(技术如果不能换钱,那不过是垃圾而已)

在java研发面试的岗位中,关于JVM的内存的分配格局这一块儿的知识,是必须会问到的。第一,对于理解深层次的java很有帮助。其次,在程序调试代码中,常会出现的OutOfMemory错误提示。这部分知...

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复

虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)