浅谈java内存中的堆和栈

来源:互联网 发布:javascript 教程 pdf 编辑:程序博客网 时间:2024/05/17 23:35

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();
}






}


0 0