Java 虚拟机基本结构

来源:互联网 发布:股海网指标公式源码 编辑:程序博客网 时间:2024/06/05 15:32

Java 虚拟机的工作原理是一个Java程序员应该了解的基本知识。

在工作中我们也可以通过对Java虚拟机的配置进行性能优化。

提高我们程序的效率。节约开发的成本。

因此许多公司也将Java虚拟机列为面试的必考点。

下面就写一下Java虚拟机的基本结构

Java虚拟机简介

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

虚拟机基本结构

这里写图片描述

类加载子系统

类加载子系统从文件系统中加载Class信息(加载的是字节码)。

进行一系列的诸如验证,解析,初始化等操作。

提供对上层的服务,封装下层的方法区, Java堆等细节

方法区

加载的类信息(典型的像类定义信息)存放于方法区内。

其他的还存放运行时常量池信息。

Java堆

这部分是在虚拟机启动时就建立的主要内存工作区域。

几乎所有的对象实例都存放在Java堆中。

直接内存

Java支持Java程序使用直接内存。直接内存是程序直接绕过Java堆直接向系统申请使用的内存空间。

相比较与Java堆,直接内存的访问速度快。所以在读写频繁的场合出于性能优化的目的可以使用直接内存。

Java栈

在每个线程创建的时候都会相对应的创建Java栈。在栈中保存的是帧信息。

包括局部变量,方法参数等

本地方法栈

本地方法栈像是Java栈的变种。只不过Java栈存放的是Java方法的信息。

本地方法栈存放的是本地方法信息。(通常为C语言编写,像系统API之类的)

PC寄存器

寄存其中存放的是指向当前执行方法的指针。

小结

前面的可以分为两类。

一类是从空间维度上对内存空间的管理。这类包括方法区、Java堆、直接内存。

另一类是从时间维度上对线程进行管理。这类包括Java栈,本地方法栈,PC寄存器。

所以虚拟机从时间和空间上将系统资源完全把握。

垃圾回收机制

参照上面的结构图没有提到还有垃圾回收系统

而垃圾回收系统是Java虚拟机中尤为重要的组成部分

这部分可以对方法区,Java堆,直接内存这部分内存空间进行自动化的回收管理。

时间部分的随着线程的消亡自动回收所以不再考虑范围内。

垃圾收集(GC)又主要包括哪些内存需要回收?什么时候回收?如何回收?三个问题。