Tar*_*ngh 10 java jvm classloader
我很好奇JVM查找执行程序的所有位置?我更感兴趣的是了解JVM查找类文件的顺序和位置,比如查看java库,扩展库,类路径等任何目录,比如调用java的当前目录?我对JVM行为更感兴趣,而不是类加载器加载类的方式,我知道它有直到root的父委托机制.
如果从编译类保存在文件系统上的目录以及同一目录中的jar文件中执行类,那么JVM是加载两个还是只加载一个?
假设你有一个不安全的线程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位于类路径中.无论什么类路径被声明为classpath in META-INF/MANIFEST.MF,也要考虑.-cp已指定,那就是类路径.$CLASSPATH设置,那就是类路径.java已启动的当前目录是类路径.-cp src/A.jar:src/B.jar,那么A.jar将首先搜索,然后B.jar-cp或,这很重要$CLASSPATH.Vector并且ArrayList应该具有相似的性能(ArrayList应该执行稍微好一些synchronized,但是当没有争用时锁定速度很快,因此差异应该很小).无论如何,Vector已经过时了:不要在新代码中使用它.