分别把相同的类放在不同的目录下,分别答应不同的类容
public class HelloClassLoader{ public static void main(String[]args){ System.out.println("i am in bootclassloader"); } }如图
可以证明类加载器是从顶向下加载的
建立4个类代码分别如下:
第一个类:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Worker {
public void doit(){
Calendar cd = Calendar.getInstance();
cd.setTime(new Date());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
String date=sdf.format(new Date());
System.out.println("hello do it==" + date);
}
}
public class MyClassLoader extends ClassLoader {
public Class<?> findClass(byte[] b) throws ClassNotFoundException {
return defineClass(null, b, 0, b.length);
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 自定义类加载
* @Author:xuehan
* @Date:2016年2月27日下午5:00:38
*/
public class MyclassLoaderUtils{
// 最后一次被修改时间
long lastmTime = System.currentTimeMillis();
// 判断class文件是否被修改过
public boolean isClassModified(String fileName){
File file = new File(fileName);
if(file.lastModified() - lastmTime > 0){
System.out.println("文件被修改");
lastmTime = System.currentTimeMillis();
return true;
}
return false;
}
// 从本地读取文件
@SuppressWarnings("unused")
private byte[] getClassBytes(String filename) throws IOException {
File file = new File(filename);
long len = file.length();
lastmTime = file.lastModified();
byte raw[] = new byte[(int) len];
FileInputStream fin = new FileInputStream(file);
int r = fin.read(raw);
fin.close();
return raw;
}
//加载类, 如果类文件修改过加载,如果没有修改,返回当前的
public Class loadClass(String name) throws ClassNotFoundException, IOException{
Class c = null;
if (isClassModified(name)){
MyClassLoader mc = new MyClassLoader();
return c = mc.findClass(getClassBytes(name));
}
return c;
}
第四个类:
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 虚拟机加载入口的地方
* @Author:xuehan
* @Date:2016年2月27日下午5:33:14
*/
public class HelloMain {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args)
throws ClassNotFoundException, IOException, NoSuchMethodException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException, InterruptedException {
String path = "D:\\Users\\workspace\\jvm\\src\\main\\java\\com\\jvm\\day3\\Worker.class";
MyclassLoaderUtils mc = new MyclassLoaderUtils();
while (true) {
Class c = mc.loadClass(path);
if(null == c){
c = Worker.class;
}
Object o = c.newInstance();
Method m = c.getMethod("doit");
m.invoke(o);
Thread.sleep(2000);
}
}
}
相关推荐
第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | 第8节Java的发展历史续00:02:27分钟 | 第9节Java技术体系00:08:46分钟 | 第10节jdk8的新特性00:07:31分钟 | 第11节lanmbda表达式简介...
第6讲 杂谈 免费 00:12:37 第7讲 Java的发展历史 00:27:24 第8讲 Java的发展历史续 00:02:27 第9讲 Java技术体系 00:08:46 第10讲 jdk8的新特性 00:07:31 第11讲 lanmbda表达式简介 00:07:02 ...
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久...5. 类加载器 6. 运行期优化 第五章:内存模型 1. Java 内存模型 2. 可见性 3. 有序性 4. CAS 与原子类 5. synchronized 优化
当jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小。为了避免调整,可使用-XX:PerSize标志设置初始值。 下面把永久域初始值设置成32m,最大值设置成64m。 java -Xms512m -Xmx512m -Xmn128m -XX...
/ 126 5.3.5 选择收集器降低延迟 / 130 5.4 本章小结 / 133 第三部分 虚拟机执行子系统 第6章 类文件结构 / 136 6.1 概述 / 136 6.2 无关性的基石 / 136 6.3 Class类文件的结构 / 138 6.3.1 魔数与Class文件...
4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类加载和运行时扩展。 5. JIT编译:JVM还具备即时编译(Just-In-Time Compilation)的能力,它可以根据运行时...
4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类加载和运行时扩展。 5. JIT编译:JVM还具备即时编译(Just-In-Time Compilation)的能力,它可以根据运行时...
4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类加载和运行时扩展。 5. JIT编译:JVM还具备即时编译(Just-In-Time Compilation)的能力,它可以根据运行时...
第6章 面向对象(下) 166 6.1 基本数据类型的包装类 167 6.2 处理对象 170 6.2.1 打印对象和toString方法 170 6.2.2 ==和equals比较运算符 172 6.3 类成员 175 6.3.1 理解类成员 175 6.3.2 单例(Singleton...
第二部分是7-13章,对JVM、Java源代码和字节代码操作、类加载器、对象生命周期、多线程、并发编程、泛型、安全等Java平台的核心技术进行了深入解析,掌握这部分内容有助于深入理解Java的底层原理;第三部分为第14章...
第二部分是7-13章,对JVM、Java源代码和字节代码操作、类加载器、对象生命周期、多线程、并发编程、泛型、安全等Java平台的核心技术进行了深入解析,掌握这部分内容有助于深入理解Java的底层原理;第三部分为第14章...
HotSpot VM是目前市面上高性能JVM的代表作之一,它采用解释器+JIT 编译器的混合执行引擎,使得Java ...第6 章 内存分配与垃圾回收 / 147 第7 章 类加载机制 / 185 第8 章 剖析HotSpot 的架构模型与 执行引擎 / 209
第6章 类文件结构 6.1 概述 6.2 无关性的基石 6.3 Class类文件的结构 6.3.1 魔数与Class文件的版本 6.3.2 常量池 6.3.3 访问标志 6.3.4 类索引、父类索引与接口索引集合 6.3.5 字段表集合 6.3.6 方法表...
开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了 43 家。 移动手机联盟创始成员: Aplix 、 Ascender 、 Audience 、 Broadcom 、中国移动、 eBay 、 Esmertec 、谷歌、...
│ 高并发编程第二阶段48讲、JVM内置三大类加载器的详细介绍.mp4 │ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下世界.mp4 │ 高并发编程第二阶段50讲、ClassLoader父委托机制详细介绍.mp4 ...
│ 高并发编程第二阶段48讲、JVM内置三大类加载器的详细介绍.mp4 │ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下世界.mp4 │ 高并发编程第二阶段50讲、ClassLoader父委托机制详细介绍.mp4 ...
javax.sql.rowset.spi 第三方供应商在其同步提供者的实现中必须使用的标准类和接口。 javax.swing 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 javax.swing....
增加静态编译功能,支持挂接第三方链接器(比如VC6中的link.exe)。 静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理...
疯狂的java讲义 源码 这是Java学习中的一些代码以及...JRE:Java运行时环境,它包含了JVM(Java虚拟机)还有类加载器、字节码校验器以及大量的基础类库。 6 2018-10-30 Java集合,HashSet和TreeSet(无序和有序) 7 2
加载器、对象生命周期、多线程、并发编程、泛型、安全等Java 平台的核心技术进行了深 入解析,掌握这部分内容有助于深入理解Java 的底层原理;第三部分为第1 4 章,是对Java 8 的展望,简要介绍了Java 8 中将要...