美文网首页程序人生码农的世界程序员
(八)java虚拟机结构详解(JVM)

(八)java虚拟机结构详解(JVM)

作者: 为自己代颜_ | 来源:发表于2018-04-07 21:37 被阅读25次

    本文主要涉及三方面内容
    1.jvm整体结构;
    2.java代码的编译和执行过程;
    3.内存管理和垃圾回收;
    (一)废话不多说,直接上图


    JVM结构.jpeg

    上图为JVM整体组成结构,有几个模块组成:
    1.class文件生成模块:通过jdk自带的javac编译命令生成(之前文章有详细介绍)


    编译流程.jpeg
    中间过程就是javac编译程序内部处理的过程,核心就是针对源代码词法和语法的分析。

    2.类加载器子系统模块:JVM运行时自动创建,作用是将class字节码加载到jvm对应的内存中。类加载的核心就是classLoader,classLoader也是动态加载技术的核心。classLoader在此不作详细介绍下一章再总结。
    classLoader将class字节码加载到jvm内存中如下图


    类加载器.jpeg

    上图为jvm提供的几种加载器
    Eclipse中可以 动态加载一些jar可以拓展eclipse的功能,原理就是jvm提供了一个Custom ClassLoader的功能,让我们可以加载指定jar包中的字节码文件,拓展应用的功能,从而实现动态加载。android中继承了jvm的这一特性,所以android也可以实现动态加载功能(之后也会详细介绍android中基于此动态加载技术的热修复、热更新、组件化的内容)。
    3.内存空间模块:分为四个部分,分别存储class字节码不同的部分。过程如下图:


    class字节码加载到jvm对应的内存过程.jpeg
    Loading:从文件中获取类的信息并且载入到JVM的内存中
    Verifying:检查读入的结构是否符合JVM规范的描述
    Preparing:分配一个结构用来存储类信息

    Resolving:把这个类的常量池中的所有的符号引用改变成直接引用
    Initializing:执行静态初始化程序,把静态变量初始化成指定的值。所以在源java代码中写的static修饰的属性不会把值立即赋值给这个属性,它会执行Loading、Verifying、Preparing、Resolving等步骤之后再进行初始化。

    4.垃圾回收模块
    5.其它模块:如指令集、执行引擎、本地方法接口等等,都属于jvm底层与CPU打交道的暂时不用深入。
    下一章节:内存管理和垃圾回收:

    相关文章

      网友评论

        本文标题:(八)java虚拟机结构详解(JVM)

        本文链接:https://www.haomeiwen.com/subject/hqkuhftx.html