java虚拟机在执行程序的过程中会把它管理的内存划分为不同的区域。他们每个区域都有自己的用途,创建及销毁时间。有的会随着虚拟机进程的创建而创建,有的会随着线程的启动和结束而创建及销毁。运行时数据区将划分为一下几个部分-->线程共享部分(堆,方法区)线程隔离部分(虚拟机栈,本地方法栈,程序计数器,)
1.堆 主要是存放对象,是被所有线程共享的 是Java虚拟机中最大的一块
2.方法区 存放已经被加载的类信息 常量 静态变量 及时及时编译后的字节码 运行时常量池就是方法区的一部分
3.虚拟机栈 是线程私有的 是描述Java方法执行内存模型的 每当创建一个方法都会创建一个栈帧 用于存储局部变量表 方法出口信息 操作数栈 动态链接 一个方法从执行到结束 对应这个 一个栈帧的出栈和入栈。
4。程序计数器也是线程私有的 他描述的是线程执行的字节码的行号 Java虚拟机的多线程 就是通过多线程的轮流切换并分配处理器的时间来实现的。一个处理器 任何时候只能执行一条线程中的指令 ,当线程切换到原来的线程能恢复到正确的位置, 都需要一个程序计数器,这个计数器 每个线程互不干扰 属于线程私有的