标签:栈空间 class 变量 字符串池 image post static code nbsp
--reference Java Heap Memory vs Stack Memory Difference
在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有什么异同,以及和数据结构中的堆栈有何关系?
堆内存(堆存储空间)会在Java运行时分配给对象(Object)或者JRE的类。只要我们创建了一个对象,那么在堆中肯定会分配一块存储空间给这个对象。而我们熟知的Java垃圾回收就是在堆存储空间上进行的,用以释放那些没有任何引用指向自身的对象。任何在堆中分配的对象都有全局访问权限,而且可以从应用的任何地方被引用。
Java 栈存储空间用来供线程执行时使用。栈空间中包含特别的变量如:短生命周期和指向其他在堆中对象的引用。这里栈存储空间满足后进先出的顺序。当一个函数被调用时,会在栈中分配一块新的存储空间,用来存放函数的基本数据(【Java心得总结一】Java基本类型和包装类型解析)以及在函数中对其它对象的引用。一旦函数执行结束,存储空间就会被释放供下一个函数使用。
栈存储空间远远小于堆存储空间
Memory.java
 1 public class Memory {
 2  
 3     public static void main(String[] args) { // Line 1
 4         int i=1; // Line 2
 5         Object obj = new Object(); // Line 3
 6         Memory mem = new Memory(); // Line 4
 7         mem.foo(obj); // Line 5
 8     } // Line 9
 9  
10     private void foo(Object param) { // Line 6
11         String str = param.toString(); //// Line 7
12         System.out.println(str);
13     } // Line 8
14  
15 }
下图展示了堆栈存储空间是如何存储基本类型、对象以及指向变量的引用

程序执行过程:
a堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
标签:栈空间 class 变量 字符串池 image post static code nbsp
原文地址:http://www.cnblogs.com/MyhobbyBoKe/p/JavaHeapMemoryvsStackMemoryDifference.html