JVM系列之类的验证

作者: 简楼 | 来源:发表于2021-03-29 21:44 被阅读0次

一、前言

类的加载完成后,就是验证;
保加载进来的字节流符合JVM规范

二、验证三问

    1)什么是验证?
   验证.class是否符合JVM规范,包括语义、语法以及逻辑是否合规。

    2)为什么验证?
    保证JVM对class的正常识别,保证虚拟机的正常运行;

    3)怎么验证?
        i. 文件格式验证:验证.class文件字节流是否符合class文件的格式的规范,并且能够被当前版本的虚拟机处理。这里主要被魔数、主版本号、常量池等等的校验

        ii. 元数据验证:验证是否符合java语言规范,主要是对字节码描述的信息进行语义分析,以保证其描述的信息符合java语言规范的要求,比如说验证这个类是不是有父类,类中的字段方法是不是和父类冲突等等

        iii. 字节码验证:确保程序语义合法,符合逻辑,是整个验证过程最复杂的阶段。主要是通过数据流和控制流分析,确保程序语义是合法的、符合逻辑。在元数据验证那个阶段对数据类型做出验证后,这个阶段主要对类的方法做出分析,保证类的方法在运行时不会做出危害虚拟机安全的事

        iv. 符号引用验证:确保下一步的解析能正常执行,它是验证的最后一个阶段,发生在虚拟机将符号引用转化为直接引用的时候。主要是对类自身以外的信息进行校验。目的是确保解析动作能够完成

三、非必须的验证

    对整个类加载而言,验证阶段是一个很重要但又非必需的阶段;
如果能够确保代码没有问题,那就没有必要去验证,因为校验是也是需要花费时间的。
所以我们可以使用 -Xverfity:none 来关闭大部分的验证。

相关文章

  • JVM系列之类的验证

    一、前言 类的加载完成后,就是验证;保加载进来的字节流符合JVM规范 二、验证三问 1)什么是验证? 验证.c...

  • JVM系列之类的加载

    一、前言 一处编译,处处运行! 二、JVM是什么? JDK包含了JRE,JRE是java程序的运行环境; JDK:...

  • jvm系列之类加载机制

    muggle 1.类的生命周期    类从被加载到虚拟机内存中内存中开始,到卸载出内存为止,它的整个生命周期包括:...

  • JVM系列之类的使用与卸载

    前言 一个完整即将使用的类已经在JVM虚拟机中整装待发了,进击!!! 类的使用 类的使用一般可以分为主动使用和被动...

  • JVM系列之类的准备与解析

    一、前言 每个类的生命周期,和生命一样,都有起点与终点;每个类都会在自己的生命周期里,完成自己的使命--使命必达!...

  • JVM系列之类的初始化

    类的初始化 前言 类孕育了新的生命周期,那么接下来就是让他健康的茁壮成长,对否? 案例1 输出值: 案例2 输出值...

  • JVM 之类加载

    一.概述 Java不同于C/C++这类传统的编译型语言,也不同于php这一类动态的脚本语言。可以说Java是一种半...

  • JVM介绍系列文章

    知晓JVM系列(一):对JVM总览知晓JVM系列(二):JVM内存管理机制与优化初探知晓JVM系列(三) :常用的...

  • JVM基础知识系列

    JVM基础系列 JVM知识点扫盲系列(1) JVM知识点扫盲系列(2) JVM内存的那些事 JVM类加载的那些事 ...

  • JVM

    简介 Jvm 系列一:Java类的加载机制Jvm系列二:JVM内存结构 --内存泄漏与内存溢出Jvm系列三:GC算...

网友评论

    本文标题:JVM系列之类的验证

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