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>()方法,在执行时候都会赋予正确的值,也就是编写时候的值。
    希望能交流更多技术,关注小白的微信公众号吧。
    在这里插入图片描述

    小白技术社
  • 相关阅读:
    [转]微服务架构
    [转]认识JWT
    [转]win10中安装JDK8以及环境配置
    [转]PHP开发者必须了解的工具—Composer
    [转]php,使用Slim和Medoo搭建简单restful服务
    [转]分别使用Node.js Express 和 Koa 做简单的登录页
    [转]Node.js框架对比:Express/Koa/Hapi
    centos rancher 通过本机 docker images 新增container
    [转]Ubuntu18.04下使用Docker Registry快速搭建私有镜像仓库
    [转]rancher 初步
  • 原文地址:https://www.cnblogs.com/xbjss/p/13326682.html
Copyright © 2011-2022 走看看