`

classloader相关

    博客分类:
  • jvm
阅读更多

classloader分类

启动类装载器

扩展类装载器

应用装载器

启动类装载器加载java基本api相关的类。

扩展装载器加载JAVA_HOME/jre/lib/ext目录下的class文件

应用装载器加载应用程序相关jar包及程序相关class

启动顺序

启动类装载器---->扩展类装载器---->应用装载器

类装载器执行

类装载采用双亲委托模式,即应用装载器请求它的父装载器(扩展装载器),扩展装载器请求它的父装载器(启动装载器),顶层的装载器一定是启动类装载器,如果父装载器不能返回所需类,就由自己来加载。

类装载器的安全机制

jvm可以有多个classloader,每一个classloader都有一个名称空间唯一标识,只有同一个名称空间内的类采可以相互访问。

如果非启动类装载器试途装载java.lang.Integer类,该操作将被jvm取消,因为Integer经过由启动类装载器装载。

如果某个classloader试途装载一个恶意的class,如java.lang.Virus,该类在相关的父classloader中没有,所以将成功装载,问题是该类位置java.lang包中,这是非常危险的,这表明它可以访问java.lang中的相关类,但是classloader的名称空间不同virus还是不可以访问java.lang中的类,也就是说对于用户级的classloader加载的类只会拥有在同一个classloader同一个包的访问权限。

classloader还有一个安全域的概念,即classloader将被加载的类放入一个安全域中,安全域决定该类在运行时的权限。

相关api

获得boot classloader

sun.misc.Launcher.getBootstrapClassPath()

获得应用classloader

ClassLoader.getSystemClassLoader()

获得扩展classloader

ClassLoader.getSystemClassLoader().getParent()

用户可以自定义classloader

自定义ClassLoader需要继承ClassLoader抽象类,重写findClass方法,这个方法定义了ClassLoader查找class的方式

主要可以扩展的方法有:

findClass          定义查找Class的方式

defineClass       将类文件字节码加载为jvm中的class

findResource    定义查找资源的方式

如果嫌麻烦的话,我们可以直接使用或继承已有的ClassLoader实现,比如

  • java.net.URLClassLoader
  • java.security.SecureClassLoader
  • java.rmi.server.RMIClassLoader
  • sun.applet.AppletClassLoader

Extension ClassLoader 和 App ClassLoader都是java.net.URLClassLoader的子类。

这个是URLClassLoader的构造方法:

public URLClassLoader(URL[] urls, ClassLoader parent)

public URLClassLoader(URL[] urls)

 

分享到:
评论

相关推荐

    ClassLoader

    Java 虚拟机中ClassLoader 相关简介 双亲委托机制 Android 中ClassLoader 简介

    javase源码-classloader-leak-prevention:ClassLoader泄漏预防/保护

    要了解有关类加载器泄漏、其原因、类型、找到它们的方法和已知违规者的更多信息,请参阅此处的博客系列: 小服务程序 3.0+ 在 Servlet 3.0+ 环境中,您需要做的就是在.war包含此 Maven 依赖项: < dependency > &...

    关于Android中自定义ClassLoader耗时问题的追查

    热修复和插件化是目前比较热门的技术,要想更好的掌握它们需要了解ClassLoader,下面这篇文章主要给大家介绍了关于Android中自定义ClassLoader耗时问题追查的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧

    Java Classloader机制用法代码解析

    主要介绍了Java Classloader机制用法代码解析,涉及JDK默认ClassLoader,双亲委托模型,自定义ClassLoader等相关内容,具有一定借鉴价值,需要的朋友可以参考下

    Java classloader原理深究

    前面已经写过一篇关于java classloader的拙文java classloader原理初探。  时隔几年,再看一遍,觉得有些地方显得太过苍白,于是再来一篇:  完成一个Java类之后,经过javac编译,会生成一个class文件,这个...

    Java ClassLoader 原理详细分析

     大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都...

    Java classloader和namespace详细介绍

    主要介绍了Java classloader和namespace详细介绍的相关资料,需要的朋友可以参考下

    深入java虚拟机(七)深入源码看java类加载器ClassLoader 1

    摘要视图订阅曹胜欢欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章登录 | 注册Java程序员从笨鸟到菜鸟(81)3054

    Java运行时环境之ClassLoader类加载机制详解

    主要给大家介绍了关于Java运行时环境之ClassLoader类加载机制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    gretty-groovy-classloader:最小的示例来重现gretty groovy classloader的问题

    有关没有Spring Boot的示例,请参阅: : 作品:./gradlew jettyRun 常规类失败:./gradlew tomcatRun Gretty也会崩溃,并使tomcat在端口8080上运行。 看来ClassCastException是由gretty插件修改了为Web应用...

    源码分析BlackDex大法,是如何运作的?共三篇

    上文说到Application是通过LoadedApk#makeApplication完成的,那么我们看下相关实现。 本文源码为:android11_r1 系统源码:android.app.LoadedApk#makeApplication getClassLoader内部流程过于复杂,感兴趣的自己...

    深入JVM内核 - 原理、诊断与优化

    在本课程中个,将详细介绍JVM的基本原理、组成以及工作方式,并配合实际案例,介绍相关的调优技巧。 课程大纲: 第一课 初识JVM JVM分类 Java语言规范 JVM规范 介绍JVM的基本知识和发展历史,并介绍了Java语言...

    Java基础知识点 - 内容比较全面

    1.5 JVM ClassLoader机制 1.6 Java中的synchronized使用 1.7 Java中的反射机制 1.8 Java中Heap与Stack的区别 1.9 Java中String和StringBuffer的区别 1.10 Java中Comparable和Comparator实现对象比较 1.11 Java...

    【JVM】类加载器与双亲委派模型

    有关类加载的全过程,可以先参考我的另外一篇文章类的奇幻漂流——类加载机制探秘 类加载器的类型 类加载器有以下种类: 启动类加载器(Bootstrap ClassLoader) 扩展类加载器(Extension ClassLoader) 应用类...

    SOFABoot 是蚂蚁集团开源的基于 Spring Boot 的研发框架.rar

    为了解决 Spring Boot 下的类依赖冲突的问题,SOFABoot 基于 SOFAArk 提供了 Spring Boot 上的类隔离的能力,在一个 SOFABoot 的系统中,只要引入 SOFAArk 相关的依赖,就可以将 SOFA 中间件相关的类和应用相关的类...

    深入分析Java Web技术内幕高清PDF版.zip

    《深入分析Java Web技术内幕》围绕JavaWeb相关技术从三方面全面深入地进行阐述。首先介绍前端知识,主要介绍JavaWeb开发中涉及的一些基本知识,包括Web请求过程、HTTP协议、DNS技术和CDN技术。其次深入介绍Java技术...

    深入分析Java Web技术内幕 修订版.pdf

    主要围绕Java Web 相关技术从三方面全面、深入地进行了阐述。首先介绍前端知识,即在JavaWeb 开发中涉及的一些基本知识,包括Web 请求过程、HTTP、DNS 技术和CDN 技术。其次深入介绍了Java 技术,包括I/O 技术、中文...

    InstantRun-ApkParse:apk解析有关即时运行的文件

    而恰恰我是从 Instant Run3.0 开始分析的,所以在读完网上相关文章后感觉和自己实践结果偏差,使我产生一系列的为什么。本文章就是认真寻找其原理之后的产物。文章会将相同的代码分别在 gradle:2.0 ~ 2.3 ~ 3.0 上...

    JVM基础教程

    有关JVM的基础教程。介绍JVM原理:hotspot、classfile、classloader、内存模型、锁、同步、JVM内存管理和垃圾收集。

    JVM:类加载器子系统.pdf

    总结了类加载器子系统相关的内容,主要包括类加载器子系统的作用、ClassLoader角色、加载的过程、双亲委派机制以及沙箱安全机制等内容

Global site tag (gtag.js) - Google Analytics