目录
JVM内存结构
1、Class Loader类加载器
2、Execution Engine 执行引擎负责解释命令,提交操作系统执行
3、Native Interface 本地接口
4、Runtime Data Area 运行数据区
1、Class Loader 类加载器
负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它 是否可以运行,则由Execution Engine决定。
2、Native Interface
本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,Java 诞生的时候是C/C++横行的 时候,要想立足,必须有调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为native的代码(标识是C/C++编写),它的具 体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机,或者Java系统管理生产设备,在企业级应用中已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等等, 不多做介绍。
3、Method Area方法区
方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单 说,所有定义的方法的信息都保存在该区域,此区属于共享区间。 静态变量+常量+类信息+运行时常量池(JDK1.6)存在方法区中 实例变量存在堆内存中保存。
4、PC Register 程序计数器
每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行 引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。
程序计数器(Program Counter,PC)是一种用于存储当前指令地址的寄存器。它在计算机体系结构中起着重要的作用,用于指示下一条要执行的指令的位置。
多线程是指在一个进程中同时运行多个线程,每个线程可以独立执行不同的任务。多线程的主要优势是可以提高程序的并发性和响应性。
程序计数器与多线程之间存在紧密的关系。在多线程环境中,每个线程都有自己独立的程序计数器。当一个线程被调度执行时,它的程序计数器会指示下一条要执行的指令的位置。当线程被切换到另一个线程时,该线程的程序计数器会保存当前执行位置,并将控制权交给下一个线程。当线程再次被调度执行时,它的程序计数器会恢复到之前保存的位置,从而继续执行。
通过使用独立的程序计数器,多线程可以实现并发执行,每个线程都可以独立地执行不同的指令序列。这种并发执行可以提高程序的性能和响应性,使得多个任务可以同时进行。同时,程序计数器的保存和恢复操作也保证了线程切换时的正确性和一致性。
5、Native Method Stack 本地方法栈
它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。