【JVM】Java类加载的全过程

本文详细探讨了Java类加载的全过程,包括加载、验证、准备、解析和初始化五个阶段,以及类加载器的工作原理。类加载器负责加载二进制字节流,验证确保字节流符合JVM安全要求,准备阶段为类变量分配内存并设置初始值,解析阶段将符号引用转换为直接引用。此外,文章还介绍了双亲委派模型,该模型保证了类的唯一性和安全性。
摘要由CSDN通过智能技术生成

0、前言

从.java类文件创建,经过JVM编译后生成.class文件,并最终被实例化执行,在这整个过程中,Java文件发生了什么变化?JVM又做了哪些工作?笔者结合《深入理解Java虚拟机》,通过这篇文章和各位探讨分析一下。

1、类加载过程分析

JVM中类加载的全过程包括加载、验证、准备、解析和初始化

在这里插入图片描述

1.1、加载阶段

在分析这个过程之前,我们先抛四个问题:

加载什么?从哪里加载?由谁来执行加载?加载过程中需要做哪些工作?

1.1.1、加载什么

自然是加载由.java文件经JVM编译生成的.class文件。不过这么说还不算准确,实际上是加载.class文件的二进制字节流,并将这个二进制字节流中的静态存储结构转化为方法区的运行时数据结构。

首先,我们分析下.class文件包含哪些东西。.class文件由.java文件编译而成,自然和.java文件包含的东西保持一致,这里面包含类本身的一些描述性信息,包括成员变量信息、成员方法信息、构造函数信息等等。当然还包含程序员同学定义的数据结构、实现的算法逻辑等等。通过把这些信息加载到内存,从而生成方法区的运行时数据结构。

1.1.2、从哪里加载

我们知道加载时本质上是加载二进制字节流,从哪里加载,换句话说,就是从哪里获得二进制字节流。来源一般有以下几种:

  1. 从本地系统中将Java源文件动态编译为.class文件
  2. 通过网络获取(Applet)
  3. 从zip,jar等归档文件中读取
  4. 运行时计算生成(动态代理技术)
  5. 由其他文件生成(JSP)
  6. 从专有数据库中提取.class文件(场景较少)
1.1.3、由谁来执行加载

类的加载由类加载器来执行加载。这里的类加载分为两类:系统引导类加载器和用户自定义加载器(重写一个类加载器的loadClass()方法)。
类加载器会在下文详细说明。

注:摘自《深入理解java虚拟机》以说明,以下元素类型在原文中叫"组件类型"。

数组不需要通过类加载器创建,而是由JVM直接创建的,但是数据和对象有密切关系,因为数据元素的类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值