java内存的组成
- 栈
- 堆
- 方法区
栈
学习一个事物了解它一些必然的特性和优势
- 存在栈中的数据大小与生存期必须是确定的,存储速度快。
- 存放八大基本数据类型(可以这么记忆,客栈里住的人比较多,很多类型的就放到栈里面了)。byte, short, int, long, float, double, boolean, char
堆
- 堆的优势是可以动态地分配内存大小和生存期,存储速度慢。
- 存放的数据类型是:对象,数组…
了解一个简单程序的内存过程
package com.milkyFog.JavaSE.Memory;
public class Analysis {
public static void main(String[] args) {//方法区
Person man = new Person();
man.name="Tom";
man.age=3;
man.say();
shout();
Person.run();//不能man.run(); 静态方法是属于类的,而并不属于实例对象
}
public static void shout(){
System.out.println("Hello");
}
}
class Person{
public String name;
public int age;
public void say(){
System.out.println("Hello World");
}
public static void run(){
System.out.println("Run");
}
}
- main方法进栈,可以回想一下递归,那些方法一个个入栈,最终到递归头的时候,获取数据,再一个个出栈
- 方法区:
1. 放字符串常量,比如这里的"Tom"
2. 一些模板,比如这里Person这个类的构造方法
3. static修饰的方法,关于static是属于类的,不属于实例对象,不难理解和类的模板一起在方法区了 - 创建了一个Person对象赋值给man,虽然右边的对象是位于堆中,但是man这个应用变量名是位于栈中的,man指向堆中这个对象。