「三分钟了解」JVM的知识概要整理

jvm概述

虚拟机(Virtual Machine)指通过软件模拟的有完整硬件、完全隔离环境中的完整计算机系统。

JVM全称是Java Virtual Machine(Java虚拟机),是抽象规范,同时也是执行已编译 Java 字节码的软件,是操作系统和应用程序之间的中介。

Java的重要特性是平台的无关性,而Java虚拟机就是实现这一特性的关键。 不同的系统(Linux,Windows)实现不同的Java虚拟机,都遵守同样的规范,只存在微小的差异,所以绝大多数的Java程序都可以运行在不同的Java虚拟机之上。

JVM体系几个重要的内容

  • JVM内存结构

运行时数据区,负责存储运行时的数据的地方。 java设计规范中JVM的内存分成了五个部分,分别是程序计数器,Java栈,本地方法栈,Java堆以及方法区。 不同版本的JVM有些细微的差别。

  • JVM类加载机制

负责加载文件存入运行时数据区,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,再加上使用,卸载这两部分就是类的整个生命周期。 有三种自带类加载器:启动类加载器,扩展类加载器,应用程序类加载器。 类加载器工作过程是双亲委派机制,上级优先。

  • JVM执行过程

输入字节码,执行相应的指令,输出结果。 方法的执行是用栈帧入栈和出栈。执行引擎就是用来执行各个栈帧的。Java虚拟机有独立于操作系统的字节码指令集。 Class文件分两部分:1、元数据,2、字节码指令集。

  • 垃圾收集

Java堆区和方法区内存的分配和回收是动态的,垃圾回收工作主要对象。 程序计数器、虚拟机栈和本地方法栈3个区域随线程启动与销毁,不需要考虑回收。 现在的收集器基本都采用分代收集算法。

  • JVM线程管理

Java线程是直接使用了平台相关的方法去创建线程。 Windows版和Linux版本JVM使用一对一的线程模型实现的,一条Java线程就映射到一条轻量级进程中。

  • Java内存模型

每个线程都有一个工作内存,线程只可以修改自己工作内存中的数据,然后再同步回主内存,主内存由多个线程共享。

一些比较知名的商用JVM

  • Hot Spot,OpenJava或者Oracle的java都使用这个版本虚拟机。后来又合并了JRockit。
  • J9 VM,IBM开发自家使用的一个高度模块化的JVM。
  • Dalvik,Android平台的核心组成部分之一,但是只是与Java有关系,并非Java虚拟机,它执行的是dex。


分享到:


相關文章: