Java虚拟机根本构造

类加载子系统

类加载子系统负责从文件系统或网络中加载Class信息,加载的类的数据结构寄存于一块叫办法区的内存空间中。对于类加载子系统相干请查看:JVM虚拟机的类加载机制

办法区

办法区次要存储类加载后的数据结构信息、运行时常量池信息、字符串、数字常量(这部分常量信息是Class文件中常量池局部的内存映射)。

Java堆

Java堆在虚拟机启动的时候建设,它是Java程序最次要的内存工作区域。简直所有的Java对象实例都寄存于Java堆中。堆空间是所有线程共享的,这是一块与Java利用密切相关的内存区域。

间接内存

Java的NIO库容许Java程序应用间接内存。间接内存是在Java堆外的、间接向零碎申请的内存区域。通常拜访间接内存的速度会优于Java堆。因而,出于性能思考,读写频繁的场合可能会思考应用间接内存。因为间接内存在Java堆外,因而,它的大小不会间接受限于Xmx指定的最大堆大小,然而零碎内存是无限的,Java堆和间接内存的总和仍然受限于操作系统的最大内存。

垃圾回收零碎

垃圾回收零碎是Java虚拟机的重要组成部分,垃圾回收器能够对办法区、Java堆和间接内存进行回收。其中,Java堆是垃圾收集器的工作重点。和C/C++不同,Java中所有的对象空间开释都是隐式的。也就是说,Java中没有蕾丝free()或者delete()这样的函数开释指定的内存区域。对于不再应用的垃圾对象,垃圾回收零碎会在后盾默默工作,默默查找、标识并开释垃圾对象,实现包含Java堆、办法区和间接内存中的全自动化治理

Java栈

每一个Java虚拟机线程都有一个公有的Java栈。一个线程的Java栈在线程创立的时候被创立。Java栈中保留着帧信息,Java战中保留着局部变量、办法参数,同时和Java办法调用、返回密切相关。

本地办法栈

本地办法栈和Java栈十分相似,最大的不同在于Java栈用于办法的调用,而本地办法栈则用于本地办法的调用。作为对Java虚拟机的重要扩大,Java虚拟机容许Java间接调用本地办法(通常应用C语言编写)。

PC(Program Counter)寄存器

PC寄存器也是每个线程公有的空间,Java虚构机会为每一个Java线程创立PC寄存器。在任意时刻,一个Java线程总是在执行一个办法,这个正在被执行的办法称作以后办法。如果以后办法不是本地办法,PC寄存器就会指向以后正在被执行的指令。如果以后办法是本地办法,那么PC寄存器的值就是undefinded。

执行引擎

执行引擎是Java虚拟机的最外围组件之一,它负责执行虚拟机的字节码。古代虚拟机为了进步执行效率,会应用即时编译技术将办法编译成机器码后在执行。