• Java类加载机制


    类加载包括这七个过程。

    加载Loading

    有两种时机会触发类加载:1、预加载.2、运行时加载

    验证

    连接阶段的第一步,这一阶段的目的是为了确保.class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全

    准备

    准备阶段是正式为类变量分配内存并设置其初始值的阶段,这些变量所使用的内存都将在方法区中分配

    解析

    解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程

    初始化

    初始化阶段是类加载过程的最后一步,初始化阶段是真正执行类中定义的Java程序代码(或者说是字节码)的过程。初始化过程是一个执行类构造器<clinit>()方法的过程,根据程序员通过程序制定的主观计划去初始化类变量和其它资源。把这句话说白一点,其实初始化阶段做的事就是给static变量赋予用户指定的值以及执行静态代码块

    虚拟机会保证类的初始化在多线程环境中被正确地加锁、同步,即如果多个线程同时去初始化一个类,那么只会有一个类去执行这个类的<clinit>()方法,其他线程都要阻塞等待,直至活动线程执行<clinit>()方法完毕

    Java虚拟机规范严格规定了有且只有5种场景必须立即对类进行初始化:

    1.使用new关键字,调用静态方法或者静态变量。

    2.虚拟机启动的时候会初始化main方法的那个类。

    3.反射

    4.子类的父类没有加载。

    5.

  • 相关阅读:
    【leetcode】二叉搜索树的最近公共祖先
    052-12
    052-11
    052-10
    052-9
    052-8
    052-6
    052-5
    052-3
    052-2
  • 原文地址:https://www.cnblogs.com/faker2014/p/7205606.html
Copyright © 2020-2023  润新知