一、JVM引言
JVM在整个jdk中处于最底层,负责与操作系统(计算机)的交互(zmh理解语言交流),用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也叫虚拟计算机。操作系统装入JVM是通过jdk中Java.exe来完成解释运行,java.exe完成编译运行!
二、JVM内存结构
- 方法区 (Mthod Area):
也称“永久代(permanent generation)”,“非堆”,用于储存虚拟机加载的类信息,常量,静态变量,是各个线程共享的内存区域,运行时常量池:方法区的一部分,Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息就是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中 - 栈空间:
描述的是java方法执行的内存模型,每个方法被执行的时候,都会创建一个“栈帧”用于存储局部变量(包括参数),操作栈,方法出口等信息。
每个方法被调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。声明周期与线程相同,是线程私有的.局部变量表:存放八种基本类型,对象引用,其中64位长度的long和double类型的数据会占用两个局部变量的空间,其余数据类型只占一个。
局部变量表是在编译时完成分配的,当进入一 个方法时,这个方法需要在栈帧中分配多大的局部变量是完全确定的,在运行期间不再改变 - 程序计数器:
是最小的一块内存,它的作用是当前线程所执行的字节码的行号指示器,在虚拟机的模型里,
字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,异常处理,
线程恢复等基础功能都需要依赖计数器完成. - 堆(Heap):
也叫java堆,CG堆。是JVM中所管理的内存中最大的一块内存区域,是线程共享的,在JVM启动时创建。存放了对象的实例及数组(所有new的对象)
JVM的优化也可以称为堆的优化 - 程序计数器:
是最小的一块内存,它的作用是当前线程所执行的字节码的行号指示器,在虚拟机的模型里,
字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,异常处理,
线程恢复等基础功能都需要依赖计数器完成