Vector
,如果我们将它的性能与ArrayList
进行比较,哪一个会更好,为什么?如何找到课程。答案在这里:
http://docs.oracle.com/javase/1.5.0/docs/tooldocs/findingclasses.html
第2点的答案:查找课程的顺序如下:
因此,如果在运行时使用-jar选项,则类来自jarfile。
但是只加载了一个类。
不使用任何其他类加载器:
rt.jar
`中的$JRE_HOME/lib
)
扩展类($JRE_HOME/lib/ext
`中的一些JAR)
类路径,按顺序。指定类路径有四种可能性:
如果指定了-jar
,则该JAR位于类路径中。无论在META-INF/MANIFEST.MF
中声明为classpath的类路径都被认为是。
否则,如果指定了-cp
,那就是类路径。
否则,如果设置了$CLASSPATH
,那就是类路径。
否则,启动java
的当前目录是类路径。
所以,如果我指定-cp src/A.jar:src/B.jar
,那么将首先搜索A.jar
,然后B.jar
-cp
或$CLASSPATH
,这很重要。Vector
和ArrayList
应该具有相似的性能(ArrayList
应该表现稍好,因为它不是synchronized
,但是当没有争用时锁定速度很快,因此差异应该很小)。无论如何,Vector
已经过时了:不要在新代码中使用它。http://www.javaworld.com/javaworld/javaqa/2001-06/03-qa-0622-vector.html
我对JVM行为更感兴趣,而不是类加载器加载类的方式
对不起,但这是荒谬的。因为答案是JVM创建了一个类加载器,让这个类加载器加载类。因此,为了理解“JVM行为”,您需要了解类加载器行为。
但也许你的问题是:JVM如何创建系统类加载器?
接受的答案已经是正确的,但How Classes are Found有更详细和更新的官方规范。
一些警告如下:
类文件具有反映类的完全限定名称的子路径名。例如,如果类com.mypackage.MyClass存储在/ myclasses下,则/ myclasses必须位于用户类路径中,并且类文件的完整路径必须是/myclasses/com/mypackage/MyClass.class。如果类存储在名为myclasses.jar的存档中,则myclasses.jar必须位于用户类路径中,并且类文件必须作为com / mypackage / MyClass.class存储在存档中。
以及Java Launcher如何查找用户类的优先级
- 默认值“。”,表示用户类文件是当前目录中的所有类文件(如果在包中,则位于其下)。
- CLASSPATH环境变量的值,它覆盖默认值。
- -cp或-classpath命令行选项的值,它会覆盖缺省值和CLASSPATH值。
- 由-jar选项指定的JAR存档,它覆盖所有其他值。如果使用此选项,则必须使用所有用户类 来自指定的档案。