Java Web ClassLoader工作机制
一、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工作机制的更多相关文章
- 深入理解ClassLoader工作机制(jdk1.8)
ClassLoader 顾名思义就是类加载器,ClassLoader 作用: 负责将 Class 加载到 JVM 中 审查每个类由谁加载(父优先的等级加载机制) 将 Class 字节码重新 ...
- 2 深入分析 Java IO的工作机制(一)
大部分Web应用系统的瓶颈都是I/O瓶颈 2.1 Java的I/O类库的基本架构 Java的I/O操作类在包java.io下,大概有将近80个类,这些类大概可以分成如下4组. 基于字节操作的I/O接口 ...
- Java Web程序工作原理
Web开发的最重要的基本功能是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Specitication对于Web Server和 ...
- Web的工作机制
简要的介绍一下Web的工作机制,以便对开发JavaWeb项目有个更好的理解. 一.Web的概念 1.1 何为Web:Web是万维网(World Wide Web)的简称.Web出现以前, ...
- 理解ClassLoader工作机制
package com.ioc; public class Test { public static void main(String[] args) throws ClassNotFoundExce ...
- 深入分析Java I/O 工作机制
前言 : I/O 问题是Web 应用中所面临的主要问题之一.而且是任何编程语言都无法回避的问题,是整个人机交互的核心. java 的I/O类操作在java.io 包下,将近80个子类, 大概可以分成 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- 第六章 深入分析ClassLoader工作机制
补充(非书中): Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件).类加载器负责读取Java字节代码,并转换成 java.lan ...
- Java I/O 工作机制(一) —— Java 的 I/O 类库的基本架构
Java 的 I/O 类库的基本架构 Java 的 I/O 操作类在包 java.io 下,有将近 80 个类. 按数据格式分类: 面向字节(Byte)操作的 I/O 接口:InputStream 和 ...
随机推荐
- 13.调整数组顺序使奇数位于偶数前面 Java
思路 两次遍历,第一次把奇数加到list中,第二次把偶数加到list中,时间复杂度为O(n). 利用类似于插入排序的方法,但时间复杂度为O(n^2). 代码 import java.util.Arra ...
- OUC_Summer Training_ DIV2_#2之解题策略 715
这是第一天的CF,是的,我拖到了现在.恩忽视掉这个细节,其实这一篇只有一道题,因为这次一共做了3道题,只对了一道就是这一道,还有一道理解了的就是第一篇博客丑数那道,还有一道因为英语实在太拙计理解错了题 ...
- Qt自定义窗口部件
QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin) 改进法 1.改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和Hexs ...
- Python——sklearn提供的自带的数据集
sklearn提供的自带的数据集 sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在线下 ...
- 使用pyinstaller 打包python程序
1.打开PyCharm的Terminal,使用命令pip install pyinstaller安装pyinstaller 2.打包命令:pyinstaller --console --onefile ...
- OpenCV、OpenCL、OpenGL、OpenMP的区别
OpenCV OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个开源发行的跨平台计算机视觉库,可以运行在Linux.Wind ...
- Linux vi/vim命令
转自:http://www.runoob.com/linux/linux-vim.html Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一 ...
- 机器学习之Xgboost算法
知识点 """ xgboost:是一种提升算法,串行的决策树 过程: 第一棵树:目标值:1000 ,预测值:950 第二颗树:目标值:1000-950=50(残差作为输入 ...
- 转 layer的Icon样式以及一些常用的layer窗口使用
转载地址:http://blog.csdn.net/beauxie/article/details/60959971 本文搜集的是本人在实际开发中所用到的layer窗口,未用到的layer按钮,请参考 ...
- MongoDB in Action (MongoDB 实战).pdf
http://www.open-open.com/doc/view/691d4d2232ce4b30b14c6b218fff4be8