很多人在Java的书籍中看到过很多关于堆和栈内存的教程以及参考说明, 但是很难解释什么是程序的堆内存以及栈内存
一: Java 堆内存空间
Java程序运行时使用java Heap 内存为对象以及JRE类分配内存, 不论我们在何时创建何种类型的对象, 他总是在堆内存中创建的
Java 垃圾收集器运行在堆内容空间, 释放那些没有任何引用的对象所使用的内存。 在堆内存空间创建的任何对象都具有全局访问权限, 并且可以从程序的任何位置引用
二: Java 栈内存空间
Java 栈内存空间用于执行线程, 栈内存始终遵循LIFO(Last-in-first-out) 顺序, 每当一个方法被执行, 会在栈内存中创建一个新的block 用于保存在函数中定义的基本数据类型变量以及对象的引用变量
当方法结束时, this block 改变它的状态为未使用并且可用于执行下一个方法
堆内存大小与堆内存相比非常少。
三: Java程序中的堆和堆栈内存
通过一个简单的程序来理解堆 栈内存的使用情况
/**
* Created by huanjulu on 12/10/17.
*/
public class HeapStackTestMemory {
public static void