zoukankan      html  css  js  c++  java
  • Java类加载过程

    类的加载简介
    1.类加载一般分为三大阶段:加载、连接和初始化
    类加载三个大阶段(图来自zejian_)
    加载阶段:主要查找class文件(二进制文件)
    连接阶段:可以分为验证、准备、解析三个更为详细的阶段
    验证:主要确保class版本、class文件的魔术因子等
    准备:为类的静态变量分配内存,并且初始化默认的值
    解析:把类中的符号信用转为直接引用
    初始化阶段:为类的静态变量赋予正确的初始值。
    2.类的主动和被动使用
    主动使用(6种):
    new 初始化、访问类的静态变量、访问类的静态方法、对某个类进行反射操作、初始化子类导致父类初始化、启动类(main)
    被动使用:
    除过以上6种都是被动使用(数组new不是主动使用)
    3.类的加载过程详解
    类的加载阶段:
    类的加载简单的说就是把class二进制加载到内存中,然后将该字节流的静态存储结构转为方法区中运行的数据结构,并在堆内存生成唯一的class对象,作为方法区数据结构的入口。
    类的加载获取方式:
    运行时生成、网络方式获取、服务zip文件获取(jar、war)、将类的二进制数据存储在数据库的BLOB字段类型中、运行时生成class文件,并动态加载
    类的连接阶段:
    验证:
    验证文件格式:魔术因子、主次版本号等
    元数据验证:语义分析过程、是否存在父类、是否集成被final修饰的类等
    字节码验证:主要验证控制流程
    其他验证:通过符号引用描述的字符能够顺利找到相关的类等
    准备:
    为该对象的静态变量分配内存和初始值。final修饰的是编译阶段javac会将其生成一个ConstantValue属性,直接赋值。
    解析:解析阶段也会有一些交叉验证过程,比如符号验证等。
    类接口解析、字段解析(某个类包含某个字段,则直接返回这个字段的引用)、类方法的解析(可以直接使用该类调用)、
    接口方法解析(必须有相应的实现类继承才能调用、可以定义方法)。
    4.类的初始化
    这是类的最后一个阶段,这个阶段最主要就是做一件事情,就是执行<clinit>()方法,在执行时候都会赋予正确的值,也就是编写时候的值。
    希望能交流更多技术,关注小白的微信公众号吧。
    在这里插入图片描述

    小白技术社
  • 相关阅读:
    java中i++ 和 ++i的区别
    下载及配置Python+openCV
    Java 计算两个日期相差多少年月日
    conda创建、查看、删除虚拟环境
    MySQL Explain详解
    mysql实现group by后取各分组的最新一条
    Mybatis中的映射结果resutType和resultMap
    java8 Stream 快速实现List转map 、分组、过滤等操作
    LC1263-AI寻路优化: 距离优先bfs -> heuristic + A* -> tarjan + A*
    第8章复习
  • 原文地址:https://www.cnblogs.com/xbjss/p/13326682.html
Copyright © 2011-2022 走看看