java应用环境中不同的class分别由不同的ClassLoader负责加载。
一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职:
Bootstrap ClassLoader
负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
Extension ClassLoader
负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class
App ClassLoader
负责加载当前java应用的classpath中的所有类。
其中Bootstrap ClassLoader是JVM级别的,由C++撰写;
Extension ClassLoader、App ClassLoader都是java类,都继承自URLClassLoader超类。
Bootstrap ClassLoader由JVM启动,然后初始化sun.misc.Launcher ,sun.misc.Launcher初始化Extension ClassLoader、App ClassLoader。
在jdk1.6.0_10\jre\lib下面有Launcher。看jdk包自带的源码 src中有Launcher的文件夹,里面是些c文件!
下面是维基的原语
引用
The bootstrap class loader loads the core Java libraries[5] (<JAVA_HOME>/lib directory). This class loader, which is part of the core JVM, is written in native code.
(上面的注释[5]: These libraries are stored in Jar files called rt.jar, core.jar, server.jar, etc.)
The extensions(扩展) class loader loads the code in the extensions directories (<JAVA_HOME>/lib/ext or any other directory specified by the java.ext.dirs system property). It is implemented by the sun.misc.Launcher$ExtClassLoader class.
(如果要引用ext下面的类 会提示你这些类是限制(restriction)访问的....
java.ext.dirs=C:\Program Files\Java\jdk1.6.0_10\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext)
The system class loader loads code found on java.class.path, which maps to the system CLASSPATH variable. This is implemented by the sun.misc.Launcher$AppClassLoader class.
sun.misc.Launcher$AppClassLoader class.和sun.misc.Launcher$ExtClassLoader class.都在jre/lib/rt.jar下的包内
这些都是 Lantcher的内部类
看Launcher的一段代码 反编译过来的
ExtClassLoader extclassloader;
try
{
extclassloader = ExtClassLoader.getExtClassLoader();
}
catch(IOException ioexception)
{
throw new InternalError("Could not create extension class loader");
}
try
{
loader = AppClassLoader.getAppClassLoader(extclassloader);
}
catch(IOException ioexception1)
{
throw new InternalError("Could not create application class loader");
}
Thread.currentThread().setContextClassLoader(loader);
String s = System.getProperty("java.security.manager");
if(s != null)
{
SecurityManager securitymanager = null;
if("".equals(s) || "default".equals(s))
securitymanager = new SecurityManager();
else
try
{
securitymanager = (SecurityManager)loader.loadClass(s).newInstance();
}
catch(IllegalAccessException illegalaccessexception) { }
catch(InstantiationException instantiationexception) { }
catch(ClassNotFoundException classnotfoundexception) { }
catch(ClassCastException classcastexception) { }
if(securitymanager != null)
System.setSecurityManager(securitymanager);
else
throw new InternalError((new StringBuilder()).append("Could not create SecurityManager: ").append(s).toString());
}
分享到:
相关推荐
《ClassLoader详解》 Java应用程序的运行离不开类的加载,而ClassLoader正是这个过程的关键角色。它负责将类的字节码加载到Java虚拟机(JVM)中并转换为可执行的Java对象。深入理解ClassLoader的工作原理对于优化...
### Java ClassLoader原理详解 #### 摘要 本文探讨了Java虚拟机(JVM)中的一个重要特性:动态类加载(Dynamic Class Loading)。这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载...
### Java ClassLoader (类加载器)详解 #### 一、教程提示 如果你正在查看这份文档,在线版中你可以点击下面的任何主题直接跳转到相应的部分。 1. **教程提示** 2. **介绍** 3. **类加载器结构** 4. **编译类加载...
### Java自定义类加载器(Class Loader)详解 #### 一、引言 在Java语言中,类加载机制是其动态特性的核心之一。通过类加载器(Class Loader),Java程序能够在运行时根据需要加载所需的类,从而实现高度的灵活性...
《Tomcat类加载机制——ClassLoader详解》 在Java Web开发中,Tomcat作为最常用的Servlet容器,其类加载机制对于理解和优化应用性能至关重要。本文将深入探讨Tomcat的ClassLoader是如何工作的,以及它如何影响到...
### Java ClassLoader详解:以淘宝网为例 #### 一、ClassLoader概述 在Java环境中,类加载器(ClassLoader)是负责加载Java类到JVM的重要组件。它不仅实现了类的加载机制,还支持了动态加载与卸载的功能。本文将...
### Java 类加载机制详解 #### 一、引言 Java 类加载机制是Java虚拟机(JVM)中的一个重要组成部分,它负责将编译后的字节码文件(.class)加载到内存中,形成Class对象,以便于Java程序能够识别并使用这些类。深入...
#### 一、JDK的classloader机制详解 在JAVA的基础培训中,深入理解JDK(Java Development Kit)和JVM(Java Virtual Machine)是至关重要的,尤其是关于JDK中的classloader机制。这一机制负责将Java类文件加载到JVM...
- **ClassLoader**: 用于加载类的机制,允许自定义类加载。 - **Package**: 表示Java包,封装了一组相关的类和接口。 - **Thread**: 实现多线程的类,提供了线程的创建、控制和同步。 - **ThreadLocal**: 提供...
《java_lang包详解》 Java语言的核心库之一就是java.lang包,它包含了Java程序中最基础、最核心的类和接口。由于这个包是自动导入到每个Java程序中的,所以理解和掌握其中的类和接口对于编写Java代码至关重要。下面...
### jvm详解(java虚拟机详解) #### Java与JVM概览 Java作为一种广泛使用的编程语言,其核心优势之一便是“一次编写,到处运行”的特性,这背后的关键技术支撑即为Java虚拟机(JVM)。JVM是一种抽象计算模型,允许...
4. **SSH2框架详解**: - **Struts**:负责表现层管理,基于MVC(Model-View-Controller)设计模式,通过Action和ActionForm实现业务逻辑与视图的分离。 - **Spring**:是一个全面的企业级应用框架,提供了依赖...
Java基础-反射机制详解 本文将详细介绍Java基础中的反射机制,包括Class类、ClassLoader类、Constructor、Method、Field类的用法,以及动态代理机制。 Class类 Class类是Java中一个特殊的类,用于描述类本身的...
"JVM详解-淘宝内部资料"提供了一套深入理解JVM的资源,涵盖了从基础到高级的各种主题,包括Java虚拟机的生命周期、JVM的体系结构、各个组件的详细解析以及垃圾收集(Garbage Collection, GC)机制等内容。...
Java虚拟机作为Java技术的基础,不仅保证了Java程序的跨平台能力,还通过自动内存管理和安全机制等特性,极大地提高了开发效率和程序的安全性。深入理解JVM的工作原理对于提高Java程序的性能和稳定性至关重要。此外...
此外,文中还详细阐述了应用服务器的关键组件如类加载器(ClassLoader)的作用以及基于JMX的技术特点,在此基础上进一步解释了应用服务器性能调优的重要性和多种优化方式。 适合人群:从事Java应用开发运维的专业人士...
通过调用 `newProxyInstance` 方法可以生成一个代理对象,此方法需要传入 ClassLoader、接口列表以及 InvocationHandler 对象。 **示例代码**: ```java // 动态代理处理类 public class DynaProxyHandler ...
Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File 类 基础 IO 类和相关方法InputStream OutputStream Reader 类Writer 类 InputStream 及其子类 ...
《Java高并发编程详解:多线程与架构设计》是一本深入探讨Java中多线程编程和并发架构的书籍,适合Java开发者和架构师阅读。本书分为四个部分,旨在帮助读者掌握Java并发的核心技术和设计原则。 第一部分是多线程...