1、基本概念
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。
在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。
JVM是(Java Virtual Machine)(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
2、JVM构造详解
JVM 虚拟机运行在操作系统上,它与硬件没有直接的交互
3、JVM 内存模型
1 Class Loader类加载器
2 Execution Engine执行引擎负责解释命令,提交操作系统执行。
3 Native Interface 本地接口
4 Runtime data area 运行数据区
4、运行数据区 具体模块功能
栈管运行堆管存储
栈(stack)也叫栈内存,主管Java程序的运行,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束该栈就Over,生命周期和线程一致,是线程私有的.
Method Area 方法区 。方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。
它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
实例变量存在于堆中。
本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其
区别不过是虚拟机栈为虚拟机执行Java 方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native 方法服务。
PC Register 程序计数器 每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记