简单理解堆,栈和方法区

JAVA的JVM的内存可分为3个区:堆(heap)、堆栈(stack)和方法区(method)

  • 堆区:

    1. 提供所有类实例数组对象存储区域

    2. jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

  • 栈区:

    1. 每个线程包含一个栈区,栈中只保存基础数据类型的对象自定义对象的引用(不是对象),对象都存放在堆区中

    2. 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

  • 方法区:

    1. 又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的classstatic变量

    2. 方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

    3. 运行时常量池都分配在 Java 虚拟机的方法区之中

栗子


public void test(){
  A a = new A();
  int b = 1;
}

public class A{

}

这个栗子中

  • a是A对象的引用所以放在栈中,A是自定义对象所以放在堆中.

  • b是基础数据类型所以在栈中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章