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 是