tomcat6类加载器与类加载顺序
tomcat6.0.32
com.dyyx.ShareUtils
//返回系统当前时间
public static String now();
package com.dyyx;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ShareUtils {
private static final String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static String now() {
Date now = new Date();
DateFormat dateFormat = new SimpleDateFormat(FULL_DATE_FORMAT);
return dateFormat.format(now);
}
}
http://127.0.0.1:8080/tools/share_utils_now.jsp
share_utils_now.jsp 里调用 ShareUtils.now() 输出当前时间
并且会调用getClassLoadInfo(Class c) 方法 输出 ShareUtils.class 的类加载器信息 代码如下
public static String getClassLoadInfo(Class c) {
String rname = getResourceName(c);
URL url = null;
ClassLoader cl = c.getClassLoader();
// 如果ClassLoader为NULL 为系统类
if (null == cl) {
url = ClassLoader.getSystemResource(rname);
} else {
url = cl.getResource(rname);
}
String s = "class=" + c + ",classloader:" + cl + ",url=" + url;
s = s + ",resourceName=" + rname;
s = s + "\n\n";
while (cl != null) {
cl = cl.getParent();
s = s + cl + "\n";
}
return s;
}
public static String getResourceName(Class clazz) {
if (null == clazz) {
return "class is null";
}
String cname = clazz.getName();
String[] arr = cname.split("\\.");
String rname = "";
int len = arr.length;
for (int i = 0; i < len; i++) {
if (i > 0) {
rname = rname + "/";
}
rname = rname + arr[i];
}
rname = rname + ".class";
return rname;
}
share-utils.jar 包含 ShareUtils.class
类加载顺序
${JAVA_HOME}/jre/lib/ext
java classpath
${webapp}/WEB-INF/classes
${webapp}/WEB-INF/lib
${tomcat.home}/lib
bootstrap class loader 引导类加载器 加载java核心类库 不是java.lang.ClassLoader的实例
ExtClassLoader 的父加载器为 bootstrap class loader 但是 getParent()拿到是null
把 share-utils.jar 或 ShareUtils.class 依次从相应的目录移除
以下为各种类加载情况日志记录
1 ExtClassLoader ${JAVA_HOME}/jre/lib/ext
class=class com.dyyx.ShareUtils,classloader:sun.misc.Launcher$ExtClassLoader@addbf1,url=jar:file:/D:/soft/jdk1.6.0_21/jre/lib/ext/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class
null
2 AppClassLoader java classpath
class=class com.dyyx.ShareUtils,classloader:sun.misc.Launcher$AppClassLoader@19821f,url=jar:file:/D:/tomcat6min/bin/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class
null
3 WebappClassLoader ${webapp}/WEB-INF/classes
class=class com.dyyx.ShareUtils,classloader:WebappClassLoader
context:
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
,url=file:/D:/soft/book/high/code/action/webroot/WEB-INF/classes/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class
null
4 WebappClassLoader ${webapp}/WEB-INF/lib
class=class com.dyyx.ShareUtils,classloader:WebappClassLoader
context:
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
,url=jar:file:/D:/soft/book/high/code/action/webroot/WEB-INF/lib/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class
null
5 StandardClassLoader ${tomcat.home}/lib
class=class com.dyyx.ShareUtils,classloader:org.apache.catalina.loader.StandardClassLoader@1172e08,url=jar:file:/D:/tomcat6min/lib/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class
null
双亲委派模型
引导类加载器 扩展类加载器 应用(系统)类加载器 自定义类加载器(L1) 自定义类加载器(L2) 自定义类加载器(Ln) ......
转载于:https://www.cnblogs.com/metoy/p/3851770.html
tomcat6类加载器与类加载顺序相关推荐
- 深入理解Java类加载器:Java类加载原理解析
http://blog.csdn.net/zhoudaxia/article/details/35824249 1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpi ...
- Java类加载器(一)——类加载器层次与模型
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- java引导类加载器_Java类加载器层次结构(一)
类加载器有一种父/子关系.除了引导类加载器外,每个类加载器都有一个父类加载器.本章通过分析ClassLoader的源码来展示java类加载器的层次结构. 根据规定,类加载器会为它的父类加载器提供一个机 ...
- 什么是类加载器,类加载器如何分类
一.类加载器 1.什么是类加载器 类加载器:负责将.class文件(存储的物理文件)加载到内存中 2.类加载时机: ① 创建类的实例(对象) ② 调用类的实例方法 ③ 访问类或者接口的类变量,或者为该 ...
- Java类加载器(类加载的流程、三大类加载器BootstrapClassLoader、ExtClassLoader、AppClassLoader)
一.三大类加载介绍 1.1.BootstrapClassLoader BootstrapClassLoader是顶级加载器,默认加载的是%JAVA_HOME%中lib下的jar包和class类文件,他 ...
- 面试干货4——你对Java类加载器(自定义类加载器)有了解吗?
类加载器 推荐:在准备面试的同学可以看看这个系列 一.类加载器的作用 二.Java虚拟机类加载器结构 1. 引导类(启动类)加载器 2. 扩展类加载器 3. 系统类加载器 三.类加载器的加载机制 1. ...
- java 类加载器加载顺序 经典例子
写了一个string 类,和api中包名,类名都是一样的,然后去加载: 1 package java.lang; 2 public class String{ 3 public static void ...
- 面试-JVM-类加载-类加载器--自定义类加载器-JVM调优
文章目录 ==类加载== 谈谈你对类文件结构的理解?有哪些部分组成? 谈谈你对类加载机制的了解? 编写java代码是如何运行起来的? 类加载机制 类加载各阶段的作用分别是什么? 有哪些类加载器?分别有 ...
- 【Android 逆向】类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )
文章目录 一.ClassLoader 源码简介 二.BaseDexClassLoader 源码简介 三.DexClassLoader 源码简介 四.PathClassLoader 源码简介 五.InM ...
最新文章
- 细嚼慢咽读论文:PointNet论文及代码详细解析
- Mxnet - Understanding weight shape for Dense Layer MXNET权重参数形状的疑惑(内部设计形式行列谁在前不用管,多个转置运算而已)
- ContentType大全
- 排序算法 JavaScript
- 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流
- Java LinkedHashMap clear()方法与示例
- Android学习路线(十九)支持不同设备——支持不同(Android)平台版本号
- android 自定义 打包文件类型,Android Studio配置打包生成自定义文件名
- php - MySQL创建新用户并授权
- 系统学习机器学习之参数方法(一)
- Linux上查到目前透过FTP进来的使用者
- [算法]用java实现堆操作
- vue + vue-router +axios + element UI + PHP + CodeIgniter + Mysql 项目管理系统
- matlab 格式化文件,Matlab 文件格式化/Matlab Source File Formator
- Mac 上使用 zmodem 发送和接收堡垒机文件
- 网页截图怎么截一整张_如何网页截图?(截长图)
- 魅族计算机软件不见了,任务栏不见了
- 百度竞价点击系统,互动点击软件【胖虎图图-互动点击专家】
- golang 实现 tcp-聊天室
- 年轻人千万别让老司机把你带到坑里