一、堆溢出
创建对象时如果没有可以分配的堆内存,JVM就会抛出OutOfMemoryError:java heap space异常。
堆溢出实例:
public static void main(String[] args) {
List<byte[]> list = new ArrayList<>();
int i=0;
while(true){
list.add(new byte[5*1024*1024]);
System.out.println("分配次数:"+(++i));
}
}
二、栈溢出
栈空间不足时,需要分下面两种情况处理:
线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError
虚拟机在扩展栈深度时无法申请到足够的内存空间,将抛出OutOfMemberError
附:当前大部分的虚拟机栈都是可动态扩展的。
1、栈空间不足——StackOverflowError实例
public class errorTest02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//栈溢出之栈空间不足——StackOverflowError实例
new errorTest02().test();
}
public void test(){
test();