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

    小白技术社
  • 相关阅读:
    资源放送丨《Oracle存储过程中的性能瓶颈点》PPT&视频
    警示:一个update语句引起大量gc等待和业务卡顿
    周末直播丨细致入微
    Java VS Python:哪个未来发展更好?
    【LeetCode】279.完全平方数(四种方法,不怕不会!开拓思维)
    事件驱动
    Android初级教程以动画的形式弹出窗体
    Android简易实战教程--第五话《开发一键锁屏应用》
    迎战大数据-Oracle篇
    Android初级教程获取手机位置信息GPS与动态获取最佳方式
  • 原文地址:https://www.cnblogs.com/xbjss/p/13326682.html
Copyright © 2011-2022 走看看