zoukankan      html  css  js  c++  java
  • Java ClassLoader知识点

    Java ClassLoader知识点:


    0.双亲委托等知识,网络已经有详细解释,参考其他。

    1.java class标识, 二进制的class定义(来源与jar包或其他方式)和对应的classLoader唯一标识该类
    两个class比较的时候, 如isInstance, asInstance,任意一个不匹配将认为不等

    2.通过new创建的对象,继承父对象的Class loader,在一个已经存在的对象,方法中通过setContextClassLoader修改classloader不会生效,new的对象仍然是默认的AppClassLoader
    Thread.currentThread().setContextClassLoader(classLoader)可修改线程的ClassLoader
    只有在修改之后,通过反射创建的对象,这个对象再创建的对象会是修改后的classloader

    3.继承的对象load时,先load自身,再load父类
    依然使用该class loader并且子类与类自身的classLoader可不同(通过自定义的classLoader,override loadClass方法中指定其他的classloader可以做到)
    但是,子类与父类接口使用参数,返回值的class的class Loader,需要保持一致,否则运行时报错

    附注:

    自定义classloader实现参考,可以参考spark设计的HiveClientImpl(注意该classloader为IsolatedClientLoader.classLoader),HiveClient(classLoader为AppClassLoader),HiveShims,IsolatedClientLoader等源码

    实现定义classloader,在同一个jvm中加载不同版本的hive client,以同时访问多个不通版本的hive。

    参考博客:

    Spark对HiveMetastore客户端的多版本管理、兼容性探究以及栅栏实现 https://blog.csdn.net/zhanyuanlin/article/details/95898018

    slide:https://github.com/tianjiqx/slides/blob/master/Java%20ClassLoader.pdf

    欢迎转载,但请声明出处。
  • 相关阅读:
    遍历文件夹与文件
    HMM&CRF
    获取js代码运行的时间
    小程序canvas绘制纯色圆角区域 setdata数组某一项
    layui type:2 iframe子页面向父页面传值
    layui 时间插件,change&&done,按照官网写法无效,解决方式!
    doT.js模板用法
    css画叉叉(一般用于关闭按钮)
    js复制文本到剪贴板
    node之module与fs文件系统
  • 原文地址:https://www.cnblogs.com/tianjiqx/p/13448515.html
Copyright © 2011-2022 走看看