java 虚拟机 --内存区域分配
1:java运行时数据区域
java运行时会把内存划分为不同的数据区域
2:解释每一个区域
1:程序计数器
一个处理器同一时间只会执行一个线程,java虚拟机的多线程执行是通过切换时间分片的形式实现的,各个线程都有自己的计数器,记录字节码执行的行号,线程切换时能正确执行代码,这一块的内存是线程私有的
2:java 虚拟机栈
每一个方法执行时会创建一个栈帧用于记录局部变量、动态链接、 方法出入口等信息,即方法的调用全过程,开始的虚拟机入栈到结束的出栈;这一块内存也是线程私有的;所以异常触发时需要回溯和调用栈的信息,开销比较大;
3:java 堆
java堆用于存储和分配实例对象,虚拟机启动时创建,所有线程共享一个堆内存
4:本地方法栈
记录Native方法的调用的服务
5:方法区
所有线程共享一个方法区,用于记录加载类的信息、常量、静态变量等数据