如何让一个Class被一个虚拟机实例载入2次

以前在一些Blog上面经常看到分析java虚拟机载入Class的各种机制,其中有一种叫做委托机制. 也就是Classloader总是先让他的上一级去查找,只有上一级找不到的时候,他自己才去查找.这也就是说一个Class总是会被同一个ClassLoader载入了.

但是我又知道,一个Class在一个虚拟机里面是通过3个因素来决定:加载器,类名,包名.我记得一个虚拟机是可以把一个Class载入2次. 如果是一个Class都是由一个ClassLoader来载入,也就是不可能被载入2次了.一直有这样一个问题没有明白.

周末在家看书,突然发现原来,这种ClassLoader的级联委托是一个推荐,不是一个强制标准.这样就豁然开朗了.也就是只要你愿意,你可以自己写多个ClassLoader来载入同一个Class,并且这些Class是无论如何也不会equal的了.

你可能感兴趣的:(java,虚拟机,ClassLoader)