前言
jvm java虚拟机
正文
java运行时数据区划分为几部分,程序计数器,java栈,本地方法栈,堆,方法区五个部分;
程序计数器
程序计数器也有称做pc寄存器;程序计数器是用来指示执行哪条指令的,所以是线程私有的。当多线程运行时,每个线程切换后需要知道上一次所运行的状态、位置。
java栈
java栈也称虚拟机栈;java栈是由一个一个的栈帧组成,栈帧是在每一个方法调用时产生的。每一个栈帧由局部变量区、操作数栈等组成.当线程执行一个方法时,就会随之创建一个对应的栈帧。这部分也是线程私有的。 String s是在java栈中创建的;
本地方法栈
本地方法栈与Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法服务的。
堆
Java中的堆是用来存储对象本身的以及数组。这块区域也是垃圾回收器重点管理的区域,由于大多数垃圾回收器都采用分代回收算法,所有堆内存也分为 新生代、老年代,可以方便垃圾的准确回收。这块内存属于线程共享区域。 new String()是在堆中创建的;
方法区
方法区主要用于存放已经被虚拟机加载的类信息,如常量,静态变量。 这块区域也被称为永久代。这部分是共享的;方法区有一个非常重要的部分就是运行时常量池