1.栈,是一种向低地址扩展的数据结构,并且是连续的存储空间,所以栈顶和栈的最大容量是固定的,在windows下,栈的最大容量是2m或者是1m,是在编译的时候就已经确定的,当申请空间大于栈的剩余空间的时候,就会报错说明overflow,所以栈能够申请的空间是比较有限的。
堆,是一种向高地址扩展的数据结构,并且是不连续的,因为系统采用的是链表的方式存放空闲存储块,当然是不连续的,链表的遍历方向是由低向高的,所以堆能够申请的空间的大小其实等同于整个系统的虚拟内存,只要还有内存空间,那么堆就能够不受限制的申请空间,这种方式比较灵活,申请空间也较大
当然,我们也可以通过测量栈的深度来判断栈是否溢出,实例代码如下:
package com.huaxin.test;
import javax.swing.JButton;
public class Test {
public static void main(String[] args) {
// Test test = new Test();
//
// test.play();
/**
* java.lang.StackOverflowError 栈溢出
* 拓展:如何测出栈的深度???
*/
/**
* java.lang.OutOfMemoryError 堆溢出
*/
// int[] array = new int[Integer.MAX_VALUE];
while(true){
// JButton button = new JButton();
//线程 Thread 进程 Progress 程序Program
//创建线程 持续5秒
Thread t = new Thread(){
public void run(){//线程工作的方法
try {
Thread.sleep(5000);//休眠5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
//启动
t.start();
}
}
//死递归
public void play(){
play();
}
}