一个Java程序运行时,程序一般会在内存中开辟一些空间供运行,其中分为栈内存和堆内存.
栈内存一般是线程独享的,存放的是一些简单的基本类型,以及方法,对象的地址等.
而堆内存的内容是全局的,存放大部分的引用类型和数据,他是全局共享的,比栈内存要大得多.
下面我们弄一段代码来演示演示—
package com.mydelo;
/**
* @author Paul
* @version 0.1
* @date 2018/3/3 0003
*/
public class Memory {
public static void main(String[] args) { // Line 1
int i = 1; // Line 2
Object obj = new Object(); // Line 3
Memory mem = new Memory(); // Line 4
mem.foo(obj); // Line 5
} // Line 9
private void foo(Object param) { // Line 6
String str = param.toString(); Line 7
System.out.println(str);
} // Line 8
}
他们的内存图如图所示
`
栈内存采用了FILO先进后出的模式,程序先执行main方法,在栈内存中开辟了一块空间,将各个变量初始化并在堆内存中开辟对应的空间存储引用类型,当执行到foo方法时,再在main空间的上方开辟一个foo方法的空间,用于存放方法中的基本数据类型和引用类型的地址,执行完毕后从上往下释放空间.