zoukankan      html  css  js  c++  java
  • JVM 类加载

    Java类加载机制

    类加载行为发生的时间 : 在Java代码中,类型的加载,连接和初始化过程都是在运行期间完成的;

    一个类的生命周期分为七个阶段: 加载连接(验证,准备,解析),初始化使用卸载

    image.png

    类的生命周期结束

    类结束生命周期的几种情况 :

    • 执行了System.exit()方法
    • 程序正常结束
    • 程序在执行过程中遇到了异常或者错误而异常终止
    • 由于操作系统出现错误而导致Java虚拟机进程终止

    类加载的三个重要阶段简介

    最重要的三个阶段:加载,连接,初始化,下面简单介绍这三个阶段做的事情:

    • 加载:查找并加载类的二进制数据
    • 连接
      • 验证:确保被加载类的正确性
      • 准备:为类的静态变量分配内存,并将其初始化为默认值
      • 解析:把类的符号引用转化为直接引用
    • 初始化:为类的静态变量赋于正确的初始值

    类的被动使用和主动使用

    Java程序对类的使用方式:主动使用,被动使用

    Java虚拟机实现必须在每个类或者接口首次主动使用时初始化它们

    主动使用的几种情况:

    • 1.创建类的实例
    • 2.访问某个类或接口的静态变量,对该静态变量赋值 或者调用类的静态方法
    • 3.反射(如Class.forName(“com.xxx.xxx”))
    • 4.初始化一个类的子类(child初始化parent一定被初始化)
    • 5.标记为启动类的类
    • 6.jdk1.7动态语言的支持;

    除了以上情况,其他方式都是类的被动使用,都不会导致类的初始化;

    类的加载

    定义:类的加载指的是将类的.class文件的二进制数据读入到内存中,将其放在运行时数据区的方法区内(jdk1.8元空间),然后在内存中创建一个java.lang.Object对象用来封装类在方法区内的数据结构(规范并未说明Class对象位于那里,HotSpot虚拟机将其放在了方法区中)

    加载Class文件的方式:

    • 在本地系统中直接加载
    • 通过网络下载
    • 从zip,jar等归档文件中加载
    • 从专有数据库中加载
    • 将Java源文件动态的编译为.class文件(如JSP转化为Servlet)

    静态变量所在类的主动使用

    • 只有定义了该字段的类才会被初始化
    • 子类在初始化时,要求它的父类先被初始化
  • 相关阅读:
    echarts仪表盘如何设置图例(legend)
    js上传限制文件大小
    js下载文件及命名(兼容多浏览器)
    为什么每个浏览器都有Mozilla字样(转载于知乎shadow)
    用JS做一个简单的电商产品放大镜功能
    unity下跨平台excel读写
    无限大地图:lightmap拆分
    Unity 打包总结和资源的优化和处理
    Unity3d: 资源释放时存储空间不足引发的思考和遇到的问题
    profiler内存优化:警惕回调函数
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/11956040.html
Copyright © 2011-2022 走看看