background image

Java 虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)

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

堆区:

1.存储的全部是对象

,每个对象都包含一个与之对应的 class 的信息。(class 的目的是得到

操作指令)

2.jvm 只有一个堆区(heap)被所有线程共享,

堆中不存放基本类型和对象引用,只存放对

象本身

栈区:

1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义

对象的引用

(不是对

象),对象都存放在堆区中

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

3.栈分为 3 个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

静态区/方法区:

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

量。

2.

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

代码实例(转自网络)

AppMain.java

 public   class  AppMain //运行时, jvm 把 appmain 的信息都放入方法区

{

    public   static   void  main(String[] args)  //main 方法本身放入方法区。

    {

         Sample test1 = new  Sample( " 测试 1 " );   //test1

 

是引用,所以放到栈区里, Sample 是