您的位置:首页 > 编程语言 > Java开发

浅谈java内存中的堆和栈

2015-07-24 14:57 447 查看
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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: