您的位置:首页 > 理论基础

【计算机基础】Java内存管理的进一步理解-模拟过程图解

2015-08-31 15:51 281 查看
java的内存管理分为:

1、Java堆内存;2、Java栈内存;3、方法区;4、本地方法栈



下面通过一个简单的代码示例,理解Java中,内存是怎么进行分配与管理的。示例如下:

[java]
view plaincopy

public class JavaRamExplain {
public static void main(String[] args) {
Person.whatCountry();

Person sam = new Person("sam", 20);
sam.introduceSelf();
}
}
class Person {

private String name;
private int age;
public static String country = "china";

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public void introduceSelf() {
System.out.println("My name's " + name + ",i'm " + age + " years old.");
}

public static void whatCountry() {
System.out.println("This people come from " + country);
}
}

当开始运行JavaRamExplain类时,JVM便会开始进行内存的分配管理工作。

图解过程为:



(图片较大,看不清可以图片右键-查看图像,进行查看原图)

可以看到到第八步工作结束后:

栈内存中的数据全部被释放(所以说栈内存中的数据的生命周期是已知并固定的,因为随着方法的执行结束,栈内存便会进行释放);

堆内存中的Person对象,现已没有任何对象引用指向它,所以它将被视作内存中的“垃圾”,等待回收。(堆内存中的数据由java的垃圾回收机制自动进行处理,所以其生命周期不确定)

由图中也可以看到:

类的方法会进行压栈和弹栈,对应的,方法中用到的参数(变量)便会相应的在栈内存中进行存储和释放。所以栈内存用于存放局部变量(包括基本类型和引用类型)。

类的对象会被存放到堆内存中,相应的该对象所包含的成员变量也会被存放到该空间。

类本身将在jvm通过.class运行该类时就会被加载到内存中的方法区内,顾名思义,方法区用于保存类的方法代码,其中普通方法被存放在非静态区,静态成员(方法和变量)被存放在方法区中专门的静态区当中。

栈内存是方法的运行区域(因为方法中定义的局部变量需要在栈里开辟空间),方法区是方法的存放区域。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: