java语言没有类似于c/c++的连接,所有需要的类也是在运行期间动态加载到虚拟机中的,默认情况下我们使用的类加载器是系统默认的类加载器。在tomcat的lib下的jar包是通过tomcat对该web工程实例化的WebappClassLoader对象加载的,我现在有个疑问,以tomcat为例:当虚拟机运行tomcat的一个web工程时,在这个工程下虚拟机发现需要加载一个类,虚拟机是通过那个类加载器去加载这个类的.是通过调用Thread.currentThread.getContextClassLoader()返回的类加载器来加载这个类吗,还是先找到加载当前线程当前正在运行的方法的类类加载器,然后再用该加载器去加载?
简单一点:当虚拟机发现需要加载一个类时,虚拟机先去调用那个类加载器去加载?
http://www.iteye.com/topic/584116
http://blog.csdn.net/netfishtail/article/details/1660153
看看是不是你想的。
tomcat类加载机制 很早就有人分析了,直接给你地址:
[url]http://www.iteye.com/topic/584116[/url]
如果是类加载是因为类在第一次被请求(比如构造函数,静态字段,静态方法等)时触发加载而非Class.forname等方式主动加载的话,
会使用请求方法所在的类的类加载器进行加载。
参考 https://stackoverflow.com/questions/15250656/how-is-the-classloader-for-a-class-chosen