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

    欢迎转载,但请声明出处。
  • 相关阅读:
    inotifywait实时监控文件目录
    centos7支持xming
    ssh目录权限说明
    利用xinetd实现简单web服务器
    python3 使用http.server秒速搭建web服务器
    linux FFMPEG 摄像头采集数据推流
    Linux nginx+rtmp服务器配置实现直播点播
    Nginx中加入nginx-rtmp-module
    ubuntu查看屏幕分辨率
    运用设计原则编写可测试性的代码
  • 原文地址:https://www.cnblogs.com/tianjiqx/p/13448515.html
Copyright © 2011-2022 走看看