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

    欢迎转载,但请声明出处。
  • 相关阅读:
    svn备份
    Java Web开发引用包的方法
    nucht1.2二次开发增量采集
    程序集信息设置.net
    lucene的基本查询及lucene3.0.1API
    Asp.net网站部署
    C语言面试算法题(一)
    面试题
    C语言面试算法题(二)
    C++的IO流的函数
  • 原文地址:https://www.cnblogs.com/tianjiqx/p/13448515.html
Copyright © 2011-2022 走看看