简述一下jvm运行时数据区
-
程序计数器
当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令、分支、循环、跳转异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 -
Java虚拟机栈
用于存储局部变量表、操作数据栈、动态链接、方法接口等信息。 -
本地方法栈
与虚拟机栈的作用一样的,只不过虚拟机栈是服务Java方法的,而本地方法栈是为了虚拟机调用native方法服务的。 -
Java堆
Java虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存。 -
方法区
用于存储已被虚拟机加载的类信息、常量、静态变量,即时编译后的代码等数据。