Java中的常见类加载器

Java中的常见类加载器

Java 8的ClassLoader流程:

bootstrap classloader加载rt.jar,jre/lib/endorsed

ext classloader加载jre/lib/ext

application classloader加载-cp指定的类

java9及之后的classloader流程:

bootstrap classloader加载lib/modules

ext classloader更名为platform classloader,加载lib/modules

application classloader加载-cp,-mp指定的类

同时,我们注意到,JDK9开始,AppClassLoader他爹不再是 URLClassLoader,一般热部署,插件部署,都会使用到AppClassLoader,例如Spring-Boot的热部署

Java编程模型面向对象编程(OOP )

面向切面编程(AOP)面向元信息编程(MDOP )

面向函数编程(FOP )面向模块编程(MOP )

Java中的常见类加载器

// BootstrapCLassLoader -----------6.纯C++实现的类加载器,没有对应的Java类,主要加载jre/lib/目录下的核心库// ExtClassLoader -------4.类的全名是sun.misc.Launcher$ExtClassLoader,主要加载jre/lib/ext/目录下的扩展包// AppCLassLoader -------2.sun.misc.Launcher$AppClassLoader , 主要加载CLASSPATH路径下的包

Java 8的ClassLoader流程:

bootstrap classloader加载rt.jar,jre/lib/endorsed

ext classloader加载jre/lib/ext

application classloader加载-cp指定的类

// Java 8的ClassLoader流程:// bootstrap classloader加载rt.jar,jre/lib/endorsed// ext classloader加载jre/lib/ext// application classloader加载-cp指定的类private static void printJdk1_8() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { // BootstrapCLassLoader -----------6.纯C++实现的类加载器,没有对应的Java类,主要加载jre/lib/目录下的核心库 // ExtClassLoader -------4.类的全名是sun.misc.Launcher$ExtClassLoader,主要加载jre/lib/ext/目录下的扩展包 // AppCLassLoader -------2.sun.misc.Launcher$AppClassLoader , 主要加载CLASSPATH路径下的包 //1.获取Main的类加载器 Class

mainClass = Main.class; ClassLoader mainClassLoader = mainClass.getClassLoader(); System.out.println("@mainClassLoader 's Name:" + mainClassLoader.toString()); System.out.println("----------");//sun.misc.Launcher$AppClassLoader@18b4aac2 //todo:2.打印AppClassLoader的加载路径,只支持JDK 1.8以下,主要加载CLASSPATH路径下的包 URL[] mainClassLoaderUrLs = ((URLClassLoader) mainClassLoader).getURLs(); Arrays.stream(mainClassLoaderUrLs).limit(2).forEach(System.out::println); System.out.println("----------");//Java/jdk1.8.0_131/jre/lib/,jdk1.8.0_131/jre/lib/ext/,【projectDir】 //3.通过getParent方法获取mainClassLoader中的parent字段 ClassLoader mainParentClassLoader = mainClassLoader.getParent(); System.out.println("@mainParentClassLoader 's name:" + mainParentClassLoader.toString()); System.out.println("----------");//sun.misc.Launcher$ExtClassLoader@1d251891 //todo:4.打印ExtClassLoader的加载路径,主要加载jre/lib/ext/目录下的扩展包 URL[] mainParentClassLoaderUrLs = ((URLClassLoader) mainParentClassLoader).getURLs(); Arrays.stream(mainParentClassLoaderUrLs).limit(2).forEach(System.out::println); System.out.println("----------");//Java/jdk1.8.0_131/jre/lib/ext/ //5.通过getParent方法,获取mainParentClassLoader中的 ClassLoader parentParentClassLoader = mainParentClassLoader.getParent(); System.out.println("parentParentClassLoader 's name:" + parentParentClassLoader); System.out.println("----------");//null //todo:6.打印BootstrapClassLoader的加载路径,主要加载jre/lib/目录下的核心库 Class launcherClass = Class.forName("sun.misc.Launcher"); Method getBootstrapClassPathMethod = launcherClass.getDeclaredMethod("getBootstrapClassPath", (Class[]) null); getBootstrapClassPathMethod.setAccessible(true); Object bootStrapClass = getBootstrapClassPathMethod.invoke(null, (Object[]) null); Method getURLsMethod = bootStrapClass.getClass().getDeclaredMethod("getURLs", (Class[]) null); getURLsMethod.setAccessible(true); URL[] urls = (URL[]) getURLsMethod.invoke(bootStrapClass, (Object[]) null); Arrays.stream(urls).limit(2).forEach(System.out::println); System.out.println("----------");//Java/jdk1.8.0_131/jre/lib/}

JAVA 获取系统配置信息重点内容

System.out.println(“java版本号:” + System.getProperty(“java.version”)); // java版本号System.out.println(“Java提供商名称:” + System.getProperty(“java.vendor”)); // Java提供商名称System.out.println(“Java提供商网站:” + System.getProperty(“java.vendor.url”)); // Java提供商网站System.out.println(“jre目录:” + System.getProperty(“java.home”)); // Java,哦,应该是jre目录System.out.println(“Java虚拟机规范版本号:” + System.getProperty(“java.vm.specification.version”)); // Java虚拟机规范版本号System.out.println(“Java虚拟机规范提供商:” + System.getProperty(“java.vm.specification.vendor”)); // Java虚拟机规范提供商System.out.println(“Java虚拟机规范名称:” + System.getProperty(“java.vm.specification.name”)); // Java虚拟机规范名称System.out.println(“Java虚拟机版本号:” + System.getProperty(“java.vm.version”)); // Java虚拟机版本号System.out.println(“Java虚拟机提供商:” + System.getProperty(“java.vm.vendor”)); // Java虚拟机提供商System.out.println(“Java虚拟机名称:” + System.getProperty(“java.vm.name”)); // Java虚拟机名称System.out.println(“Java规范版本号:” + System.getProperty(“java.specification.version”)); // Java规范版本号System.out.println(“Java规范提供商:” + System.getProperty(“java.specification.vendor”)); // Java规范提供商System.out.println(“Java规范名称:” + System.getProperty(“java.specification.name”)); // Java规范名称System.out.println(“Java类版本号:” + System.getProperty(“java.class.version”)); // Java类版本号System.out.println(“Java类路径:” + System.getProperty(“java.class.path”)); // Java类路径System.out.println(“Java lib路径:” + System.getProperty(“java.library.path”)); // Java lib路径System.out.println(“Java输入输出临时路径:” + System.getProperty(“java.io.tmpdir”)); // Java输入输出临时路径System.out.println(“Java编译器:” + System.getProperty(“java.compiler”)); // Java编译器System.out.println(“Java执行路径:” + System.getProperty(“java.ext.dirs”)); // Java执行路径System.out.println(“操作系统名称:” + System.getProperty(“os.name”)); // 操作系统名称System.out.println(“操作系统的架构:” + System.getProperty(“os.arch”)); // 操作系统的架构System.out.println(“操作系统版本号:” + System.getProperty(“os.version”)); // 操作系统版本号System.out.println(“文件分隔符:” + System.getProperty(“file.separator”)); // 文件分隔符System.out.println(“路径分隔符:” + System.getProperty(“path.separator”)); // 路径分隔符System.out.println(“直线分隔符:” + System.getProperty(“line.separator”)); // 直线分隔符System.out.println(“操作系统用户名:” + System.getProperty(“user.name”)); // 用户名System.out.println(“操作系统用户的主目录:” + System.getProperty(“user.home”)); // 用户的主目录System.out.println(“当前程序所在目录:” + System.getProperty(“user.dir”)); // 当前程序所在目录

相关文章

如何扩大手机空间
bt365官网

如何扩大手机空间

06-22 阅读: 4808
CF手游金韵套装有哪些,金韵套装属性详细(cf手游黄金ak 47)
必看!2017十大网络新梗流行词
下载bst365

必看!2017十大网络新梗流行词

01-13 阅读: 3085
顶级渣女常用头像,你见过几种。
365安卓版

顶级渣女常用头像,你见过几种。

10-21 阅读: 673
篮球世界杯丨综合消息:德国、加拿大晋级半决赛
冷冷的眼泪随风吹 才知道离别的滋味什么歌