jvm-014(张龙老师jvm教程) ClassLoader 源码doc文档及数组类加载器
一、ClassLoader 源码doc文档
ClassLoader是一个负责加载类的对象,它本身是一个抽象类。在给定一个类的二进制名字时,类加载器会尝试去定位(已经存在的class文件)或生成(动态代理生成的类)构成类定义的数据。一种典型的策略是将给定的二进制的类名转换成文件名,然后从文件系统中读取该类对应的class文件。
每一个类对象都会包含加载该类的类加载器的引用。
数组的class对象并不是由类加载器创建的,而是在java运行时,根据需要自动创建的。而对于数组类型的类加载器来说,通过调用class.getClassLoader()方法返回的类加载器,与数组元素的类加载器是相同的。如果数组的元素是一个原生类型,那么数组的类加载器为null。
实现ClassLoader类的子类的应用,是为了扩展实现Java虚拟机动态加载类的一种方式。
通常情况下,类加载器会被安全管理器来表示一些安全与的问题。
类加载器使用了一种委托机制来寻找类或者资源。类加载器的每一个实例,都会有一个与之相关的父类加载器。当类加载器被要求寻找类或者资源的时候,类加载器会在自己尝试去加载之前,将该请求委托给他的父类加载器。虚拟机内置的类加载器,称之为启动类加载器,她本身是没有父类加载器的,但它可以作为其它类加载器的父类加载。
支持并发加载类的类加载器叫做并发类加载器,并且它被要求在类的初始化阶段,通过调用class.registerAsParallelCapable()方法来完成对自身的注册。需要注意的是,在默认情况下,类加载器是会被注册为并发类加载器的。然而,他的子类如果也是并发类加载器的话,仍需要自己注册的。
在委托机制并不是严格层次化的环境下,类加载器是需要做到并发的,否则的话,类加载就会变成死锁。因为在类加载期间,加载类的锁会被一直持有。
通常情况下,java虚拟机会以一种与平台相关的形式,从本地文件系统中加载类。如在unix系统中,虚拟机会从classpath环境变量所定义的目录中加载类。然而有些class文件名并不是来源于某个文件,他们可能来源于其他,如网络或者是由应用程序本身所创建的,而defineClass()会将字节数组转化为一个Class类对象的实例。新定义的类的实例,可以通过class.newInstance()来完成创建。
由类加载器创建的方法或者构造方法中还可能会引用其他的类。为了确定类的引用,java虚拟机会调用创建该类的类加载器的loadclass方法。
二、数组类加载器的测试代码
public class TestCode15 {public static void main(String[] args) {String[] ary1 = new String[2];// null,启动类加载器加载StringSystem.out.println(ary1.getClass().getClassLoader());System.out.println("--------");TestCode15[] ary2 = new TestCode15[3];// AppClassLoader 系统类加载器System.out.println(ary2.getClass().getClassLoader());System.out.println("--------");int[] ary3 = new int[2];// null,原生类型类加载器返回 nullSystem.out.println(ary3.getClass().getClassLoader());}
}
执行结果:
null
--------
sun.misc.Launcher$AppClassLoader@6fefa3e7
--------
null
jvm-014(张龙老师jvm教程) ClassLoader 源码doc文档及数组类加载器相关推荐
- [源码、文档、分享] iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
转自:http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97%E3%80%81%E4%BB%A3 ...
- [源码、文档、分享] iOS/iPhone学习系列、代码教程(转)
iOS/iPhone学习系列.代码教程----~~~持续更新中~~~ http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7% ...
- 全新云豹二开直播短视频系统完整源码+带文档/搭建教程
正文: 最新云豹二开直/播短视频完整系统源码+带开发文档/教程,好友给我分享的,属于云豹二开,功能非常的强大,且有非常完整的开发文档和教程. 但是说实话这类程序不属于好部署的那一种,比较吃一定的技术, ...
- JVM类加载机制(ClassLoader)源码解析
http://blog.csdn.net/chenyi8888/article/details/7066569 其实JVM类加载机制,简单地说就是类管理,也就是我们生成的class文件. 三个步骤:装 ...
- 【JVM】Java类加载器设计原理(ClassLoader源码解读/ SPI机制/ 绕开双亲委派/ 常见Java虚拟机)
目录 1. 什么是类加载器 2. 类加载器加载的过程 3. Class文件读取来源 4. 类加载器的分类 5. 那些操作会初始化类加载器 6. 类加载器的双亲委派机制 6.1 双亲委派机制机制的好处 ...
- 这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析
前言 package com.jvm.classloader;class Father2{public static String strFather="HelloJVM_Father&qu ...
- 毕业设计-基于SSM框架大学教务管理平台项目开发实战教程(附源码)
文章目录 1.项目简介 2.项目收获 3.项目技术栈 4.测试账号 5.项目部分截图 6.常见问题 毕业设计-基于SSM框架大学教务管理平台项目实战教程-附源码 课程源码下载地址:https://do ...
- 【绝对给力】Android开发免豆资料(教程+工具+源码)下载地址汇总 【转载自51CTO】
下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载:http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载: ...
- Android开发免豆资料(教程+工具+源码)下载地址汇总
下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载: http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载 ...
最新文章
- 《中国人工智能学会通讯》——9.21 基于任务规划的资源卫星智能管控模式
- 电机驱动板测试:是否可以输出150kHz高频信号?
- 不用车载传感器,也能L4级自动驾驶?清华百度联手发布全球首个纯路侧感知自动驾驶方案...
- python自学平台-Python学习交流平台与教程推荐
- 本地一站式极速开发AI模型 百度飞桨EasyDL桌面版来了
- OpenCV Features2D和全息照相法查找已知物体
- 3月15日云栖精选夜读:双管齐下,MaxCompute数据上云与生态
- springboot 配置全局响应数据_spring boot 全局事务配置
- Siri背后语音识别巨头Nuance的衰落
- 大数据实效_普洱市以“大数据”思维全面提升新时代干部管理监督实效
- Matlab GUI界面设计
- 部署企业的网络安全方案
- 甘肃省事业单位公考招聘考试权威复习资料---GIS专业综合复习题(一)
- WiFi万能钥匙要做人与场景的连接器
- [bzoj3812]主旋律
- mmdetection使用
- 用微信 远程遥控 服务器
- DICOM:Transfer Syntax传输语义之奇葩GE Private TS
- 艾兰岛编辑器-玩家角色
- 怎么样防止文档泄密呢?