JVM系列(一)

初识Java虚拟机

1. 什么是Java虚拟机

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

Java虚拟机存在的原因是可以屏蔽底层操作系统的不同,使得同一个java文件编译生成的字节码文件可以通过不同的操作系统对应的java虚拟机,它把字节码解释成具体平台上的机器指令执行 。java使得java语言可以做到”一次编译,到处运行“。因此,java是一种跨平台的语言。

因为有了Java虚拟机这一层“解释”,会使得java程序运行时间比C/C++等语言慢。

2. 从进程的角度理解JVM

众所周知,Java虚拟机是运行在操作系统之中的,那么它在运行的时候就是操作系统的一个进程,因为进程是操作系统的执行单位。当它在运行的时候,它就是一个操作系统中的进程实例,当它没有在运行时(作为可执行文件存放于文件系统中),可以把它叫做程序。

javac xxx.java
java xxx

相信上面两条命令,大家肯定很熟悉了。执行完第一步之后,生成java文件对应的字节码,而操作系统是无法直接识别字节码的,此时就需要调用操作系统对应的虚拟机将字节码解释成操作系统所能识别的二进制可执行文件。此时我们调用了一个名叫java的程序,而这个程序运行之后就是一个JVM实例。

执行的流程

java命令执行后启动虚拟机进程,虚拟机进程启动完毕之后会读取参数(即 java命令后面接的.class文件名和一些命令行传参的参数),把他作为初始类加载到内存,对这个类进行初始化和动态链接。(初始化和动态链接在后面会讲,此处留个印象即可)接下来便是从该类的main方法开始执行。

总结分析

  • .class文件不是直接被系统加载之后就直接在CPU执行的,而是被一个叫做虚拟机的进程托管的。首先必须虚拟机进程启动就绪,然后由虚拟机中的类加载器加载必要的class文件,包括jdk中的基础类(如String和Object等),然后由虚拟机进程解释class字节码指令,把这些字节码指令翻译成本机cpu能够识别的指令,才能在cpu上运行。
  • 更深层次的讲,当我们在运行class文件的时候,其实真正执行的是Java虚拟机进程,而不是我们的程序。那我们写的编译生成的class文件是有什么作用呢?它只是虚拟机进程执行时需要的“原料”。这些“原料”在运行时被加载到虚拟机中,被虚拟机解释执行,以控制虚拟机实现我们java代码中所定义的一些相对高层的操作,比如创建一个文件等,**可以将class文件中的信息看做对虚拟机的控制信息,也就是一种虚拟指令。 **虚拟机只是处理一些底层的操作,例如内存的分配和释放等等。

3.JVM体系结构简介

image

一个Java虚拟机在运行过程中有三个子系统保证它的正常运行,分别是类加载器子系统,执行引擎子系统,垃圾收集子系统。

类加载器子系统

这个子系统用来在运行的时候根据需要动态加载类,“根据需要”代表的便是当虚拟机运行过程中需要该类,才会去加载它,而不是一次性加载所有的类。

执行引擎子系统

由虚拟机加载的类,被加载到Java虚拟机内存中之后,虚拟机会读取并执行它里面存在的字节码指令。虚拟机中执行字节码指令的部分叫做执行引擎。

垃圾收集子系统

Java虚拟机会进行自动内存管理。具体说来就是自动释放没有用的对象,而不需要程序员编写代码来释放分配的内存。这部分工作由垃圾收集子系统负责。

欢迎关注本人博客:https://allen-yu.com/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内...
    Java_Explorer阅读 2,472评论 0 2
  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 4,930评论 0 2
  • 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确实编译语言发展的一大步。 虚拟机把描述类的数据从...
    胡二囧阅读 4,558评论 0 0
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 10,934评论 1 22
  • 2017-04-30 华杉 王阳明的儿童教育法,说得非常精准。在家时的一项工作,自己辅导孩子,难处倒不在于管住孩子...
    郁萍阅读 3,707评论 0 0

友情链接更多精彩内容