JVM大致结构分析

  JVM是Java Virtual Machine(Java虚拟机)的缩写,主要分为五大模块:类装载器子系统、运行时数据区、执行引擎、本地方法接口和垃圾收集模块。都说java语言是跨平台的,其实质是JVM跨平台,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

  下面这张是搜狗百科里的JVM结构图:

这里对这张图进行简单分析:

  方法区:方法区是被所有的线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在这里定义,简单点说,就是所有方法信息都保存在该区域,每个JVM只有一个方法区,此区域属于共享区间,在jdk1.8后存放于元空间。

   Java堆:堆是JVM所管理的内存中最大的一块,是被所有Java线程锁共享的,不是线程安全的,在JVM启动时创建,大部分gc(垃圾回收)是发生在堆中的,还有一部分实在方法区中。

  程序计数器:每个线程启动的时候,都会创建一个pc寄存器,用于保存当前指令执行的地址,指令执行后,pc寄存器的内容总是指向下一条将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

  本地方法栈:保存本地方法信息(native修饰的方法),对于每个线程,将创建一个单独的本地方法堆栈。

  执行引擎:执行引擎是JVM执行Java字节码的核心,执行方式主要分为解释执行、编译执行、自适应优化执行、硬件芯片执行方式。

  本地库接口:它允许运行在Java虚拟机上的代码调用本地程序和类库,或者被它们调用,这些程序和类库可以是其它语言编写的,比如C、C++或者汇编语言。

扫描二维码关注公众号,回复: 11150935 查看本文章

  虚拟机栈:它也是线程私有的,它和线程同时创建,用于存储栈帧,每个方法在执行时都会创建一个栈帧用于存储局部变量表,操作数栈,方法出口和动态链接。

猜你喜欢

转载自www.cnblogs.com/darkfire/p/12801914.html