jvm-learning-类加载器分类
public class ClassLoaderTest {
public static void main(String[] args) {
//获取系统类加载器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
System.out.println(systemClassLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2 //获取其上层:扩展类加载器
ClassLoader extClassLoader = systemClassLoader.getParent();
System.out.println(extClassLoader);//sun.misc.Launcher$ExtClassLoader@1b6d3586 //获取其上层。:获取不到引导类加载器
ClassLoader bootstrapClassLoader = extClassLoader.getParent();
System.out.println(bootstrapClassLoader);//null //对于用户自定义类来所,他的类加载器是什么
ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2 //String类使用引导类加载器进行加载--》Java的核心类库都是使用引导类加载器的
ClassLoader strclassLoader = String.class.getClassLoader();
System.out.println(strclassLoader);
}
}
启动类加载器(引导类加载器-Bootstrap ClassLoader)
扩展类加载器Extension ClassLoader
应用程序类加载器(系统类加载器 AppClassLoader)
public class ClassLoaderTest1 {
public static void main(String[] args) {
System.out.println("##################启动类加载器");
//获取BootstrapClassLoader能够加载的api的路径
URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
for (URL url : urls) {
System.out.println(url.toExternalForm());
}
/**
* file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/rt.jar
* file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/sunrsasign.jar
* file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/jsse.jar
* file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/jce.jar
* file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/charsets.jar
* file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/jfr.jar
* file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/classes
*/ //从上面路径种随意选择一个类,看看其类加载器是什么
ClassLoader classLoader = Provider.class.getClassLoader();
System.out.println(classLoader);//null ,代表是引导类加载器 System.out.println("#################扩展类加载器");
String extDirs = System.getProperty("java.ext.dirs");
for (String path : extDirs.split(";")){
System.out.println(path);
}
/**
* #################扩展类加载器
* C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext
* C:\WINDOWS\Sun\Java\lib\ext
*/ //随便挑一个,看看类加载器
ClassLoader classLoader1 = CurveDB.class.getClassLoader();
System.out.println(classLoader1);//sun.misc.Launcher$ExtClassLoader@4b67cf4d
}
}
用户自定义类加载器
ClassLoader是什么
获取ClassLoader的方式:
public class ClassLoaderTest2 {
public static void main(String[] args) {
try {
//1获取当前类String的加载器
ClassLoader classLoader = Class.forName("java.lang.String").getClassLoader();
System.out.println(classLoader);//null //2获取当前线程上下文ClassLoader
ClassLoader classLoader1 = Thread.currentThread().getContextClassLoader();
System.out.println(classLoader1);//sun.misc.Launcher$AppClassLoader@18b4aac2 //3获取系统加载器
ClassLoader classLoader2 = ClassLoader.getSystemClassLoader();
System.out.println(classLoader2);//sun.misc.Launcher$AppClassLoader@18b4aac2
} catch (ClassNotFoundException e) {
e.printStackTrace();
} }
}
jvm-learning-类加载器分类的更多相关文章
- JVM自定义类加载器加载指定classPath下的所有class及jar
一.JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器. 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责 ...
- JVM入门--类加载器
一.基础架构 概览 我们平时说的栈是指的Java栈,native method stack 里面装的都是native方法 细节架构图 二.类加载器 1.类的加载 方法区并不是存放方法的区域,其是存放类 ...
- 【深入理解JVM】类加载器与双亲委派模型 (转)
出处: [深入理解JVM]类加载器与双亲委派模型 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段“加载”过程中,需要通过 ...
- 1.1 jvm核心类加载器--jdk源码剖析
目录 前提: 运行环境 1. 类加载的过程 1.1 类加载器初始化的过程 1.2 类加载的过程 1.3 类的懒加载 2. jvm核心类加载器 3. 双亲委派机制 4. 自定义类加载器 5. tomca ...
- JVM之类加载器、加载过程及双亲委派机制
JVM 的生命周期 虚拟机的启动 Java 虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实 ...
- JVM之类加载器子系统
类加载器子系统 作用 负责从文件系统或网络系统中加载class文件,class文件在开头有特殊的标记(魔术开头CA FE BA BE) ClassLoader只负责加载class文件,至于能否运行,由 ...
- 【JVM】JVM之类加载器
一.前言 首先,小小测试,看是否已经掌握了JVM类加载的过程 1.1.测试一 class Singleton { private static Singleton sin = new Singleto ...
- JVM之类加载器下篇
除了自定义的类加载之外,jvm存在三种类加载器,并以一种父委托的加载机制进行加载. --启动类加载器,又称根加载器,是一个native的方法,使用c++实现.在java中我们用null标识,用于加载j ...
- 【深入理解JVM】类加载器与双亲委派模型
原文链接:http://blog.csdn.net/u011080472/article/details/51332866,http://www.cnblogs.com/lanxuezaipiao/p ...
- JVM学习一:JVM之类加载器概况
18年转眼就3月份都快结束了,也就是说一个季度就结束了:而我也因为年前笔记本坏了,今天刚修好了,那么也应该继续学习和博客之旅了.今年的博客之旅,从JVM开始学起,下面我们就言归正传,进入正题. 一.J ...
随机推荐
- 一个含有多个flag的图片(Misc)
图片是来自一个老阿姨,然后这个图片是属于一个杂项题目,一个图片中包含十几个flag,格式为#....#,第一个flag就是图片一开始就放在上面的,可以直接看到. 然后文件名字也是一个flag, 将图片 ...
- hydra安装及破解rdp方法
hydra暴力破解工具 下载:https://github.com/vanhauser-thc/thc-hydra 安装步骤: ./configure make&&make insta ...
- Wireshark教程之界面介绍
实验目的 1.工具介绍 2.主要应用 实验原理 1.网络管理员用来解决网络问题 2.网络安全工程师用来检测安全隐患 3.开发人员用来测试执行情况 4.学习网络协议 实验内容 1.菜单栏选项介绍 2.快 ...
- [theHunterCOTW] 猎人荒野的召唤-一点资料
游戏介绍 购买建议 [2020-12-17] theHunter 现在有三个捆绑包 2019 Edition,2021 Edition,Complete Collection 单独购买,目前steam ...
- 从数据分析系统总架构理解BI工具的价值所在
现如今,应用商业智能BI工具的企业是越来越多了,由此也可见企业对数据分析的重视.因此,掌握一定的数据分析知识对"打工人"来说是非常重要的.现在小编就来跟大家一起来了解一下商业智能 ...
- Tableau退出已成定局,关键是用户如何“软着陆”
近期,BI界发生了一件大事,引起了大家的热议. 简单来说:Tableau停止在中国的原厂服务,把售后.解决方案等归到新加坡,在中国区域的运营将有阿里接管. 大部分业内人士认为中国区业务可能以出售.代理 ...
- .Net 新一代编译器 Roslyn 会带来怎样的影响?
.Net 新一代编译器 Roslyn 会带来怎样的影响? Roslyn是微软创建的一个.NET编译器平台,该项目于2014年4月3日开源. 最初 C# 语言的编译器是用 C++ 编写的,后来微软推出了 ...
- WPF中RichTextBox中添加文字的两种方法
RichTextBox控件不同于TextBox控件,后者可以直接通过其Text属性绑定或者在后台动态添加文字. (一)使用数据绑定 <RichTextBox FontSize="12& ...
- Spring源码之六-onRefresh()方法
Spring源码之六-onRefresh()方法 大家好,我是程序员田同学. 今天带大家解读Spirng源码之六的onRefresh()方法,这是refresh()的其中的一个方法,看似是一个空方法, ...
- 系统整理qt笔记3
qtcreator中不能输入中文: https://blog.csdn.net/qq_15725099/article/details/97305507 main.cpp #include " ...