开发者社区 问答 正文

Thead.getContextClassLoader()和Class.getClassLoader()有什么区别?

如题,同样是返回classLoader,有什么区别呢?

展开
收起
小旋风柴进 2016-03-03 16:49:55 2300 分享 版权
1 条回答
写回答
取消 提交回答
  • 前者返回的是与当前线程绑定着的 ClassLoader,在程序中可以通过 Thread.currentThread().setContextClassLoader(cl) 来指定当前线程的 ClassLoader,如果不指定则使用的是 parent classloader。

    后者返回的是加载该类的 ClassLoader,例如 String.class.getClassLoader() 返回的是加载  String 这个类的 ClassLoader,但是有些 JVM 在该 ClassLoader 为bootstrap classloader时会返回 null,这可能是为了提升性能,因为这样可以避免在类加载时为该对象指针赋值,不过这个优化完全没有必要,可以通过 if(classLoader == null) return 获取 bootstrap classloader 并无性能问题。
    

    建议了解一下 jvm classloader 的四层结构,分分钟了然。

    2019-07-17 18:51:40
    赞同 展开评论
问答地址: