一、ClassLoader的作用:

  1、类加载机制:父优先的等级加载机制

  2、类加载过程

  3、将Class字节码重新解析成JVM统一要求的对象格式

二、ClassLoader常用方法

  1、defineClass:将byte字节流解析成JVM能够识别的Class对象

  2、findClass:实现类的加载规则

  3、resolveClass:选择让JVM来解决什么时候链接这个类

  4、loadClass:获取这个类的Class对象

三、类加载器类继承关系图

  (转)

  1、ClassLoader:抽象类,类中未定义如何去找到指定类并把它的字节码加载到内存,需要ClassLoader的子类去实现。(findClass方法)

四、JVM平台提供三层ClassLoader

  1、Bootstrap ClassLoader

    主要加载JVM自身工作所需的类,完全由JVM自己控制,不遵守前边所说的类加载规则。没有父加载器,也没有子加载器,只是一个类加载工具。 

  2、ExtClassLoader

    JVM的一部分,但不是JVM亲自实现,类似程序员中的外派。服务的目标在System.getProperty("java.ext.dirs")目录下

  3、AppClassLoader

    所有在System.getProperty("java.class.path")目录下的类都可以被这个类加载器加载,这个目录就是我们常用的classpath

  通常一个应用中的类加载器的等级结构图

  特别注意:父加载器不等同于父类。我们实现自己的类加载器(不论是继承ClassLoader、还是URLClassLoader或者其他子类),其父加载器都是AppClassLoader,因为不管调用哪个父类构造器,创建的对象都必须最终调用getSystemClassLoader()作为其父加载器,而getSystemClassLoader()方法获取到的正是AppClassLoader(通过toString可以看到)

五、JVM加载class文件到内存的方法

  1、隐式加载:通过JVM自动加载需要的类到内存中

  2、显式加载:通过写代码去调用ClassLoader类来加载   1)forName()  2)loadClass()  3)findClass()

六、ClassLoader加载一个class文件到内存

  1、加载:找到.class文件并把文件包含的字节码加载到内存(Java虚拟规范并未规定字节码从何而来)

  2、验证:Class文件格式是否规范,类的元数据信息、字节码验证

    准备:内存分配,设置类变量默认初始值

    解析:(常量池中)符号引用替换为直接引用

  3、初始化:初始化类变量和其他资源(真实赋值)

  4、使用

  5、卸载 

Java Web ClassLoader工作机制的更多相关文章

  1. 深入理解ClassLoader工作机制(jdk1.8)

    ClassLoader 顾名思义就是类加载器,ClassLoader 作用: 负责将 Class 加载到 JVM 中    审查每个类由谁加载(父优先的等级加载机制)    将 Class 字节码重新 ...

  2. 2 深入分析 Java IO的工作机制(一)

    大部分Web应用系统的瓶颈都是I/O瓶颈 2.1 Java的I/O类库的基本架构 Java的I/O操作类在包java.io下,大概有将近80个类,这些类大概可以分成如下4组. 基于字节操作的I/O接口 ...

  3. Java Web程序工作原理

    Web开发的最重要的基本功能是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Specitication对于Web Server和 ...

  4. Web的工作机制

    简要的介绍一下Web的工作机制,以便对开发JavaWeb项目有个更好的理解. 一.Web的概念     1.1    何为Web:Web是万维网(World Wide Web)的简称.Web出现以前, ...

  5. 理解ClassLoader工作机制

    package com.ioc; public class Test { public static void main(String[] args) throws ClassNotFoundExce ...

  6. 深入分析Java I/O 工作机制

    前言 :  I/O 问题是Web 应用中所面临的主要问题之一.而且是任何编程语言都无法回避的问题,是整个人机交互的核心. java 的I/O类操作在java.io 包下,将近80个子类, 大概可以分成 ...

  7. Java Web(三) 会话机制,Cookie和Session详解(转载)

    https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...

  8. 第六章 深入分析ClassLoader工作机制

    补充(非书中): Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件).类加载器负责读取Java字节代码,并转换成 java.lan ...

  9. Java I/O 工作机制(一) —— Java 的 I/O 类库的基本架构

    Java 的 I/O 类库的基本架构 Java 的 I/O 操作类在包 java.io 下,有将近 80 个类. 按数据格式分类: 面向字节(Byte)操作的 I/O 接口:InputStream 和 ...

随机推荐

  1. Leetcode题目200.岛屿数量(BFS+DFS+并查集-中等)

    题目描述: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...

  2. 软工-js learning

    使用教程JavaScript Standards Reference Guide-阮一峰 9.6-9.15学习进程: 1.导论 概述 JavaScript的历史 2.语法 基本语法 数据类型 数值 字 ...

  3. Qt 串口通信 高速发送出错的解决方法总结

    使用网上的qextserialport-1.2类,自行开发多线程串口通信.开发的过程中,出现两个问题:   问题1:我用信号槽跨线程调用串口类MyCom 发送和接收数据,中间运行的时候,会内存错误,Q ...

  4. Python 生成随机数函数和加密函数(MD5)

    内容来自debugtalk import hashlib import random import string def gen_random_string(str_len): '''生成指定长度的随 ...

  5. git 将本地项目关联到远程仓库

    初始化 在本地需要关联到远程仓库的项目根目录下执行 git init 然后关联远程仓库 [project].你需要存在一个远程仓库,名字随意,然后执行下面的命令(去掉中括号)就可以关联到该仓库. gi ...

  6. linux下如何更新当前的容器镜像?

    docker commit <container_id> <container_image_name>

  7. python下载服务器

    大佬们,你们还在为传输文件时利用U盘插拔而苦恼吗,还在为设置文件共享而苦恼吗?别苦恼了,教你一秒实现文件的传输. 首先我们都要有python环境,这个肯定有. 下面就是一秒,在你要传的文件的目录下输入 ...

  8. C++继承中的属性

    class A { public: int a; A() { } void print() { cout<<a; } }; class B:public A { public: int a ...

  9. Thinkphp5 的sesssion在同一个控制器不同的方法无法获取session的原因和对策

    这一段在用thinkPHP5开发微信小程序接口的时候,在同一个控制器一个方法中存入session,在另一个方法中取出session,一直都是无法取出. 查阅各种资料得到原因:thinkPHP5里面的s ...

  10. ZooKeeper Lead选举

    前段时间学习了zookeeper,对其中比较难理解并且容易忘掉的知识点做一个记录~ 关键词: myId:表示在集群中,自身对应的id zxId:节点状态发生改变时,产生的一个时间戳,并且这个时间戳全局 ...