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

台俊峰 发布于 2014/11/10 10:11
阅读 697
收藏 0
同样是返回classLoader,有什么区别呢?
加载中
0
JFinal
JFinal

     前者返回的是与当前线程绑定着的 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 的四层结构,分分钟了然。最后,问答没加上 JFinal 标签,所以很多人看不到,无法回复你。

JFinal
JFinal
回复 @台俊峰 : 还是有关系的,因为是看到JFinal 中的 Prop.java 才想到问这个问题
台俊峰
台俊峰
谢谢!我对于类加载器和虚拟机这一块的知识比较薄弱,等会找资料了解下。这个问题和jfinal并不是直接关联的,所以没加jfinal标签。
0
台俊峰
台俊峰
@JFinal 我是看了jfinal1.9的Prop类的代码才突然想到这个问题的,能回答下我的问题吗?
0
台俊峰
台俊峰
再顶一下,没有人回答就算了
返回顶部
顶部