一尘不染

JVM如何开始寻找类?

java

  • 我很好奇JVM在哪里寻找执行程序的所有位置?我对理解JVM在什么顺序以及在何处查找类文件更感兴趣,就像它查找Java库,扩展库,类路径中的任何目录一样,例如从中调用Java的当前目录?我对JVM行为更感兴趣,而不是对类加载器如何加载类感兴趣,我知道它具有直到根的父委派机制。

  • 如果从已编译的类保存在文件系统上的目录中执行某个类,并且该类也保存在同一目录的jar文件中,那么JVM会同时加载这两个负载还是仅加载其中一个负载?

  • 假设您有一个线程不安全,Vector并且如果我们将其性能与进行比较ArrayList,哪个更好,为什么?


阅读 177

收藏
2020-12-03

共1个答案

一尘不染

如何找到课程。答案在这里:

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/findingclasses.html

关于第2点的答案:查找类的顺序如下:

  1. 当前目录中的类或包。
  2. 从CLASSPATH环境变量中找到的类。[优先1]
  3. 从-classpath命令行选项中找到的类。[取代1,2]
  4. 通过-jar命令行选项指定的jar归档文件中找到的类[覆盖1,2,3]

因此,如果在运行时使用-jar选项,则类来自jarfile。

虽然只加载一个类。

2020-12-03