关于JVM类加载的一点疑问
目前发现有些类在rt.jar包中是有的,但是jdk官方文档中却只字未提?例如:Launcher、AppClassLoader、ExtClassLoader等在rt.jar包中都可找到。openjdk源码中也有,但是官方文档却根本找不到关于这几个类的描述!
JVM启动后,Bootstrap ClassLoader(此为JVM实现的一部分,由C++写成)负责加载rt.jar等一批较为核心的Java类。
然后,由JVM已经帮我们写好的2个类加载器(AppClassLoader和ExtClassLoader)分别加载一些较为次要的Java类。
这里说的JVM启动是指当我们在命令行敲入类似:java <MainClass>的时候。当然,JVM不会自己无缘无故的启动对吧^_^
据我所知,ExtClassLoader会根据JVM环境变量java.ext.dirs的设定进行搜索,而AppClassLoader会根据java.class.path的设定进行加载。那么这里有一个疑问:平时很多教程说JVM会搜索系统环境变量CLASSPATH设定的值下的jar包和class类,那么我们知道,在Windows下是%CLASSPATH%,在Linux下是$CLASSPATH,Windows暂时不讨论。那么为什么一定要是CLASSPATH呢?为什么ClassPath、cLASSpATH、ClassPATH、ClasSpATh。。。等等都不行,一定要是全大写的CLASSPATH呢?是哪里的代码规定了呢?同时发现,java.class.path的值默认是点(.),也就是当前目录,那么这个值是哪里进行了初始化呢? 这个不好找吧。 本帖最后由 lll1985911 于 2013-12-05 14:35 编辑
嗯,虽然对加载有一点了解,但是只知其然而不知其所以然的感觉有点憋屈。。。在那里做的?怎么做的?这些问题一天不搞清楚就吃饭也吃不好。。。回复 2# ddd010
我直接倒是简单看过android的源码但是没深究。
所以我也说不出个所以然。
页:
[1]