说明:做JAVA开发的几乎都知道jvm这个名词,但是由于jvm对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及理解什么是jvm,以及弄清楚jvm的工作原理,个人认为这块还是非常有必要去认真了解及学习的,特别是刚入门或入门不久的java开发来说,这是java的基石 。
JVM(Java Virtual machine,Java虚拟机)
Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行 。因此在运行时,Java源程序需要通过编译器编译成为.class文件 。众所周知java.exe是java class文件的执行程序,但实际上java.exe程序只是一个执行的外壳,它会装载jvm.dll(windows下,下皆以windows平台为例,linux下和solaris下其实类似,为:libjvm.so),这个动态连接库才是java虚拟机的实际操作处理所在 。
JVM是JRE的一部分 。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统 。Java语言最重要的特点就是跨平台运行 。使用JVM就是为了支持与操作系统无关,实现跨平台 。所以,JAVA虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE) 。
JVM内存区域划分
粗略分来,JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎 。
类装载器
每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类和接口),并赋予唯一的名字 。每一个Java虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令 。JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是ClassLoader类的子类 。
执行引擎:它或者在执行字节码,或者执行本地方法
主要的执行技术有:解释,即时编译,自适应优化、芯片级直接执行其中解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化(目前Sun的HotspotJVM采用这种技术)则吸取第一代JVM和第二代JVM的经验,采用两者结合的方式。
自适应优化:开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化 。若方法不再频繁使用,则取消编译过的代码,仍对其进行解释执行 。
运行时数据区:主要包括:方法区,堆,Java栈,PC寄存器,本地方法栈
文章插图
- 方法区和堆由所有线程共享
方法区:当JVM的类装载器加载.class文件,并进行解析,把解析的类型信息放入方法区 。
- Java栈和PC寄存器由线程独享
JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址
- 本地方法栈:存储本地方法调用的状态
JVM运行时数据区
因为jvm运行时的数据区对我们开发来说还是特别重要要掌握的知识所以单拎开来西说下 。
- 方法区域(Method Area)
在Sun JDK中这块区域对应的为PermanetGeneration,又称为持久代 。
方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息 。
- 堆(Heap)
它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收 。
推荐阅读
- 黑茶适合什么人群喝,大麦茶适合什么人喝
- 丐帮武功有哪些 明教是不是倚天屠龙记里最强的门派
- 点淘如何填写邀请码 淘宝直播在什么地方填邀请码
- 美国最高的山是哪座山 欧洲最高的山是什么山
- 梦到下雨收被子衣服啥意思 梦见下雨收被子是什么征兆
- 淘宝上商品下架是什么原因 淘宝店铺商品上下架技巧
- 喝茶虽是好 但也不可贪杯
- 茶对人的身体有哪些好处
- 不是每个人都适合喝红茶
- 电脑开机,总需要按F1,是什么原因造成的?