运行时的内存模型
- java目前使用的虚拟机是HotSpot.运行时的内存模型可以简单分为:方法栈,堆,程序计数器,虚拟机栈,本地方法栈.
- 其中堆与方法栈是所有线程共享的.
- 虚拟机栈与本地方法栈,程序计数器是线程独享的.
- 程序计数器,虚拟机栈的生命周期与线程的周期是一样的.
程序计数器
- 程序计数器可以看作是当前线程的运行状态.进行指令分配的一小段内存块.它的功能是记录当前线程的一些状态,值.以便于线程的唤醒,启动.异常处理等线程功能都由它来完成.
虚拟机栈
- 虚拟机栈中保存的是局部变量,操作数栈,程序的出口信息.动态连接等.它的主要作用是存储线程执行的一些数据(线程内部数据).
本地方法栈
- 本地方法栈也是用来保存方法内的变量(局部变量),动态连接,出口数据等线程私有的数据.只是它对应的是本地方法,而虚拟机栈对应的是java的方法.
方法栈
- 方法栈是所有线程共享的.它主要保存所有类的信息,常量,静态成员变量.方法模型的基本信息.非静态成员变量也保存在此.所以成员变量需要考虑线程安全性的问题.
堆
- java堆是内存中最大的一部分,几乎所有的对象实例都保存于此.GC回收最主要部分也是这里.