Java的JVM的内存可分为三个区:堆(heap)、栈(stack)、方法区(method).
栈
每个线程包含一个栈区,栈中只保存方法中(不包括对象中的成员变量)的基础数据类型和自定义对象的引用,对象都存放在堆区中。
每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
栈分为三个部分:基本类型变量区、执行环境上下文、操作指令。
堆区
存储的全部是对象实例,每个对象都包含一个与之对应的class信息(class信息存放在方法区)
jvm只有一个堆区被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,几乎所有的对象实例和数组都在堆中分配。
方法区
又叫静态块,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
方法区里存的都是类型信息,也就是类的信息,而类的信息又包括以下内容:
类的全限定名(类的全路径名)
类的直接超类的全限定名(如果这个类是Object,则它没有超类)
这个类是类型(类)还是接口
类的访问修饰符,如public、abstract、final等
所有的直接接口全限定名的有序列表(假如它实现了多个接口)
常量池
字段、方法信息、类变量信息(静态变量)装载该类的装载器的引用(classLoader)、类型引用(class)
Java中的成员变量存储在堆中(非static,非final)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。