博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java类加载机制
阅读量:6604 次
发布时间:2019-06-24

本文共 1783 字,大约阅读时间需要 5 分钟。


 

0. 概述

  转载 & 修改 & 补充自 

  Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。

  虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

 

 


 

1. 什么是类的加载

  类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

  类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误。

 

 


 

2. 自定义类加载

自定义加载器、接口、app在本地

实现类在远方

 

自定义类加载器

1 import java.io.ByteArrayOutputStream; 2 import java.io.FileInputStream; 3  4 /** 5  * 自定义类加载 6  */ 7 public class MyClassLoader extends ClassLoader { 8     protected Class
findClass(String name) throws ClassNotFoundException { 9 try {10 // 定义类的path11 String path = "f:\\share\\test\\" + name + ".class";12 // 新建输入流13 FileInputStream fis = new FileInputStream(path);14 // 新建输出流15 ByteArrayOutputStream baos = new ByteArrayOutputStream();16 byte[] buf = new byte[1024];17 int len = -1;18 // 流拷贝19 while ((len = fis.read(buf)) != -1) {20 baos.write(buf, 0, len);21 }22 baos.close();23 fis.close();24 25 // 得到byte数组26 byte[] data = baos.toByteArray();27 // 使用类加载器的方法生成类对象,defineClass方法的作用是将byte数组转换为类的实例。28 Class clz = defineClass(data, 0, data.length);29 return clz;30 } catch (Exception e) {31 e.printStackTrace();32 }33 return null;34 }35 }

 

 

 

 


 

转载于:https://www.cnblogs.com/share23/p/9640199.html

你可能感兴趣的文章
rabbitmq 管理及常用命令
查看>>
iphone导航控制器的开发与使用
查看>>
debian python library re-install
查看>>
如何用转义来给JS添加的input元素设置单引号
查看>>
J2E——网络编程练习
查看>>
VirtualBox移植
查看>>
HTTP要被抛弃? 亚洲诚信携手宝塔开启HTTPS加密快速通道
查看>>
Chrome: 完全移除对WoSign和StartCom证书的信任
查看>>
RecyclerView侧滑删除功能
查看>>
记一个hystrix异常
查看>>
9.02-Spring IOC 容器中Bean的生命周期
查看>>
6.6 tar打包
查看>>
微信自动抢红包的实现(Demo已增加查看TopActivity功能)
查看>>
Spring MVC核心技术
查看>>
TCP协议如何保证传输的可靠性
查看>>
Spring Cloud云架构 - SSO单点登录之OAuth2.0 登出流程(3)
查看>>
建站心得之discuz门户程序相比ZBLOG具有哪些优势[图]
查看>>
编程之美 测试赛 石头剪刀布
查看>>
签名问题
查看>>
软件开发各阶段交付物列表
查看>>