JVM概述

作者: packet | 来源:发表于2018-07-20 19:38 被阅读0次

    JVM结构如下图所示,由编译器,加载器,执行器和运行时数据区构成。


    JVM内部结构

    JVM内部也有编译器。上图缺少这个。
    类加载其实就是根据编译后的class文件,将java字节码载入JVM内存,并完成对运行数据处于的初始化工作,供执行引擎执行。

    类加载器的工作过程

    类加载器工作原理:双亲委派原则(parent-first delegation model)。加载器试图加载某个类,会委托给父加载器加载,如果父加载器不能加载,则该加载器才会加载。

    JVM自带的加载器分为启动类加载器,扩展类加载器和应用程序类加载器,每个类加载器在JVM中只有一个实例。如果可以自定义类加载器,它的父加载器是应用程序类加载器。

    一个类由它的全限定名(包名+类名)和类加载器(实例)共同唯一确定。一个类只能被同一类加载器加载一次。

    什么时候进行类加载呢?

    1:当使用new关键字,和读取一个类的静态属性的时候(静态变量与静态方法,但是静态final的除外)。

    2:当使用反射获取一个类的时候;

    3:当初始化一个子类,必须首先加载并初始化其父类;

    4:当执行一个含有main方法的类的时候,必须首先加载含有那个main方法的类。

    字节码(bytecode)是跨平台跨语言的基石,class文件是JVM的数据入口,是个二进制字节流,不一定存储在硬盘上。

    编译期将源文件编译成class文件(由字节码构成),JVM加载并执行这个文件里的字节码。

    JVM面向 操作数栈 而非寄存器,JVM指令 = 操作码 + 操作数(0个或者多个)

    HotSpot虚拟机中,解释执行和编译执行并存。(混合模式)

    javac字节码编译器:java文件转变为class文件

    JIT:Just in Time,将热点代码从字节码编译成本地机器代码

    分层编译和执行

    0层:解释执行

    1层:Client Compiler 编译执行

    2层:Server Compiler编译执行

    2019-07-16
    生成一个类,除了new还有反射。这是最基本的思维。

    相关文章

      网友评论

          本文标题:JVM概述

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