一、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文档及数组类加载器相关推荐

  1. [源码、文档、分享] 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 ...

  2. [源码、文档、分享] iOS/iPhone学习系列、代码教程(转)

    iOS/iPhone学习系列.代码教程----~~~持续更新中~~~ http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7% ...

  3. 全新云豹二开直播短视频系统完整源码+带文档/搭建教程

    正文: 最新云豹二开直/播短视频完整系统源码+带开发文档/教程,好友给我分享的,属于云豹二开,功能非常的强大,且有非常完整的开发文档和教程. 但是说实话这类程序不属于好部署的那一种,比较吃一定的技术, ...

  4. JVM类加载机制(ClassLoader)源码解析

    http://blog.csdn.net/chenyi8888/article/details/7066569 其实JVM类加载机制,简单地说就是类管理,也就是我们生成的class文件. 三个步骤:装 ...

  5. 【JVM】Java类加载器设计原理(ClassLoader源码解读/ SPI机制/ 绕开双亲委派/ 常见Java虚拟机)

    目录 1. 什么是类加载器 2. 类加载器加载的过程 3. Class文件读取来源 4. 类加载器的分类 5. 那些操作会初始化类加载器 6. 类加载器的双亲委派机制 6.1 双亲委派机制机制的好处 ...

  6. 这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析

    前言 package com.jvm.classloader;class Father2{public static String strFather="HelloJVM_Father&qu ...

  7. 毕业设计-基于SSM框架大学教务管理平台项目开发实战教程(附源码)

    文章目录 1.项目简介 2.项目收获 3.项目技术栈 4.测试账号 5.项目部分截图 6.常见问题 毕业设计-基于SSM框架大学教务管理平台项目实战教程-附源码 课程源码下载地址:https://do ...

  8. 【绝对给力】Android开发免豆资料(教程+工具+源码)下载地址汇总 【转载自51CTO】

    下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载:http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载: ...

  9. Android开发免豆资料(教程+工具+源码)下载地址汇总

    下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载: http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载 ...

最新文章

  1. 《中国人工智能学会通讯》——9.21 基于任务规划的资源卫星智能管控模式
  2. 电机驱动板测试:是否可以输出150kHz高频信号?
  3. 不用车载传感器,也能L4级自动驾驶?清华百度联手发布全球首个纯路侧感知自动驾驶方案...
  4. python自学平台-Python学习交流平台与教程推荐
  5. 本地一站式极速开发AI模型 百度飞桨EasyDL桌面版来了
  6. OpenCV Features2D和全息照相法查找已知物体
  7. 3月15日云栖精选夜读:双管齐下,MaxCompute数据上云与生态
  8. springboot 配置全局响应数据_spring boot 全局事务配置
  9. Siri背后语音识别巨头Nuance的衰落
  10. 大数据实效_普洱市以“大数据”思维全面提升新时代干部管理监督实效
  11. Matlab GUI界面设计
  12. 部署企业的网络安全方案
  13. 甘肃省事业单位公考招聘考试权威复习资料---GIS专业综合复习题(一)
  14. WiFi万能钥匙要做人与场景的连接器
  15. [bzoj3812]主旋律
  16. mmdetection使用
  17. 用微信 远程遥控 服务器
  18. DICOM:Transfer Syntax传输语义之奇葩GE Private TS
  19. 艾兰岛编辑器-玩家角色
  20. 怎么样防止文档泄密呢?

热门文章

  1. css层叠样式表、基本选择器
  2. MySQL SQL语句练习题
  3. 人工神经网络(ANN)
  4. xshell中重启指令_远程服务器Xshell的使用 -- 重启服务器操作 和 linux的常用命令...
  5. Change Log for Pruning Undesired Code of Joomsport
  6. 手工编程铣加工视频教程 铣代码讲解
  7. 去除字符串前面的几个逗号
  8. Ubuntu 新建用户并赋予权限
  9. 美柚如何精准引流?怎么通过美柚引流?美柚引流技巧
  10. 关于百度站长工具中站点属性LOGO提交申请详解说明