3
回答
Thead.getContextClassLoader()和Class.getClassLoader()有什么区别
同样是返回classLoader,有什么区别呢?
举报
台俊峰
发帖于4年前 3回/697阅
共有3个答案 最后回答: 4年前

     前者返回的是与当前线程绑定着的 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 标签,所以很多人看不到,无法回复你。

--- 共有 2 条评论 ---
JFinal回复 @台俊峰 : 还是有关系的,因为是看到JFinal 中的 Prop.java 才想到问这个问题 4年前 回复
台俊峰谢谢!我对于类加载器和虚拟机这一块的知识比较薄弱,等会找资料了解下。这个问题和jfinal并不是直接关联的,所以没加jfinal标签。 4年前 回复
顶部