JAVA启动后,经过JVM各级ClassLoader来加载各个类到内存。
JVM的ClassLoader分三层,分别为Bootstrap ClassLoader,Extension ClassLoader,System ClassLoader。
Bootstrap ClassLoader是启动类加载器,它是用C++编写的,从%jre%/lib目录中加载类。
Extension ClassLoader是扩展类加载器,从%jre%/lib/ext目录加载类。
System ClassLoader,系统类加载器,它会从系统环境变量配置的classpath来查找路径。
情形一 重新jre/lib中的jar包
在windows系统上,我们可以安装多个JDK和JRE。设想一种情形: 我们设定当前JVM启动的是C:\Program Files (x86)\Java\jre1.7.0_85, 但是我们想读取在C:\Program Files (x86)\Java\jre1.8.0_60目录下\lib下deploy.jar,并通过com.sun.deploy.util.SecurityBaseline.getDeployVersion()输出当前的deployVersion。
在了解类加载机制后,我们知道lib/deploy.jar是通过启动类加载器加载的,在JVM启动后,如何去加载另一个指定目录中的deply.jar呢?
版权声明:本文为weixin_42511315原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。