概述
聊一聊JVM的类加载器机制
目录
聊一聊JVM的类加载器机制
01 怎么获取类加载器?哪几种类加载器
02 各个加载器加载的路径?
01 怎么获取类加载器?哪几种类加载器
- BootStrapClassLoader 引导类加载器
-
ExtClassLoader 扩展类加载器
-
AppClassLoader 应用级别的类加载器
-
UserDefineClassLoader 用户自定义的类加载器
Launcher launcher = Launcher.getLauncher(); log.info("JVM启动器有两种类加载器:"); log.info("1.Launcher-AppClassLoader:{}", launcher.getClassLoader()); log.info("2.Launcher-ExtClassLoader:{}", launcher.getClassLoader().getParent()); log.info("3.Launcher-BootStrapClassLoader(由c++实现,无法访问):{}", launcher.getClassLoader().getParent().getParent());
02 各个加载器加载的路径?
log.info("--------------No1.BootstrapClassLoader(引导类加载器)加载${JAVA_HOME}/jre/lib下的jar--------------");
URL[] urls = Launcher.getBootstrapClassPath().getURLs();
for (URL url : urls)
log.info(url.getPath());
log.info("--------------------------------------------------------");
log.info("--------------No2.ExtClassLoader(系统扩展类加载器)加载${JAVA_HOME}/jre/lib/ext下的jar--------------");
URLClassLoader extClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader().getParent();
printUrl(extClassLoader);
log.info("--------------------------------------------------------");
log.info("--------------No3.AppClassLoader(应用级别的类加载器)加载classPath下的jar--------------");
URLClassLoader appClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
printUrl(appClassLoader);
log.info("--------------------------------------------------------");
private static void printUrl(URLClassLoader appClassLoader) {
URL[] urls;
log.info(appClassLoader.toString());
urls = appClassLoader.getURLs();
for (URL url : urls)
log.info(url.getPath());
}
获取一个系统的启动器,通过启动器获取类加载器,用来将class文件加载到内存中;
类加载器的实现机制,是基于双亲委托模型实现的,意味着
1 AppClassLoader加载不到的类,会往父哪里ExtClassLoader的去加载
2 ExtClassLoader加载不到的类,会再往上级BootStrapClassLoader中去加载
3 BootStrapClassLoader记载不到的类,会抛出ClassNotFound似的异常
公众号搜索:DeanKano
企鹅群号: 561932405
最后
以上就是坦率宝贝为你收集整理的聊一聊JVM的类加载器机制的全部内容,希望文章能够帮你解决聊一聊JVM的类加载器机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复