浅谈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();
}
}
堆,是一种向高地址扩展的数据结构,并且是不连续的,因为系统采用的是链表的方式存放空闲存储块,当然是不连续的,链表的遍历方向是由低向高的,所以堆能够申请的空间的大小其实等同于整个系统的虚拟内存,只要还有内存空间,那么堆就能够不受限制的申请空间,这种方式比较灵活,申请空间也较大
当然,我们也可以通过测量栈的深度来判断栈是否溢出,实例代码如下:
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();
}
}
相关文章推荐
- Spring框架详解
- Java单例设计模式
- [leetcode-20]Valid Parentheses(java)
- Java基础语法(三)
- Java Synchronized与wait notify 连用
- Java基础语法(一)
- JDK安装和Eclipse介绍
- [LeetCode][Java] Pascal's Triangle II
- eclipse 到 android studio的一些快捷键
- 问题三20150724java.io.InvalidClassException:local class incompatible: stream classdesc
- java不定参数存在一个小问题。
- 如何在Eclipse里面更新添加主题
- ElasticSearch在window下的基本配置
- switch(String s)是在jdk1.7之后才出现,但是编译器又要求使用较低版本。
- dubbo(分布式架构)+zookeeper(注册中心)+spring(provider和consumer) 基本使用
- java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
- 在spring中使用MethodInterceptor实现aop(附项目中demo)
- JAVA抽象类和接口的理解
- Struts2注解 特别注意
- java实现从网上下载图片到本地的方法