java面向对象内存分析--栈和堆,方法区

栈 stack

  1. 栈是方法执行的内存模型,每个方法的调用都会创建一个栈帧,用来存储局部变量,操作数,方法出口等。
  2. 栈是系统自动分配,是一块连续的内存空间。
  3. 栈是线程私有,不能线程之间共享。
  4. 栈符合“先进后出,后进先出”的原则。
  5. 每一个线程会有一个栈,用于存放执行方法的信息,比如,实参,局部变量等。

堆 heap

  1. 用于存放创建好的对象。
  2. JVM里面只有一个堆,被所有线程使用。
  3. 堆是一块内存不连续的空间。

方法区 method area (静态区)

  1. JVM里面只有一个方法区,被所有线程共享。
  2. 方法区本质是堆,用于存储常量,存储类的相关信息。
  3. 用来存放不变的内容(字符串常量,静态变量,静态方法等)。

代码示例

public class TestClass {
    int num;
    String name;
    int age;
    Favor fa;

    void book() {
        System.out.println(fa.book);
    }

    public static void main(String[] agrs){
        TestClass stu = new TestClass();
        Favor fav = new Favor();
        fav.book = "java程序设计";

        stu.fa = fav;
        System.out.println(stu.fa.book);
        stu.book();
    }

}

class Favor {
    String game;
    String book;
    String sport;
}

内存分配结构图:
内存分配图

发布了8 篇原创文章 · 获赞 8 · 访问量 1043

猜你喜欢

转载自blog.csdn.net/dragoned_123/article/details/94980988