`

Java核心代码(一)认识ClassLoader & Thread

 
阅读更多

1, 共5个必备线程,和1个用户线程Thread[Thread-0,5,main] //[name,priority,group.name]

       main group: 5-main; 5-Thread-0

       system group: 10-Reference Handler, 9-Signal Dispatcher, 8-Finalizer, 5-Attach Listener

2,共2个ClassLoader:

       Bootstrap classloader是C写的,故==null, 加载10-Reference Handler, 8-Finalizer

       AppClassLoader,

 

  

/**
 * output : 
 * Thread[Thread-0,5,main]====sun.misc.Launcher$AppClassLoader@5984cf08
 * Thread[main,5,main]====sun.misc.Launcher$AppClassLoader@5984cf08
 * Thread[Finalizer,8,system]====null [Bootstrap classloader]
 * Thread[Thread-0,5,main]====sun.misc.Launcher$AppClassLoader@5984cf08
 * Thread[Reference Handler,10,system]====null [Bootstrap classloader]
 * Thread[Signal Dispatcher,9,system]====sun.misc.Launcher$AppClassLoader@5984cf08
 * Thread[Attach Listener,5,system]====sun.misc.Launcher$AppClassLoader@5984cf08
 * @author naijiang.wang
 * @date 2013-08-05 9:37:22 AM
 */
public class T {
    public static void main( String[] args )
        throws Exception {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Thread t0 = Thread.currentThread();
                System.out.println(t0+"===="+t0.getContextClassLoader());
                try {
                    Thread.sleep( 1000 );
                }
                catch ( InterruptedException e ) {
                    e.printStackTrace();
                }
            }
        }).start();
        for(Thread t : Thread.getAllStackTraces().keySet()){
            System.out.println(t+"===="+t.getContextClassLoader());
        }
    }
}
 

 2,自定义java.lang package,会导致jvm错误:

关键:可以看出加载类顺序

package java.lang;
/**
 * output:
 * Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:649)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:785)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:476)

 * @author rivertime.wang
 * @date 2014-3-8 15:06:38
 */
public class TestClassLoader {
	public static void main(String[] args) {
		System.out.println("user define 'java.lang' package");
	}
}

 

 3,bootstrap, sun.misc.Launcher$AppClassLoader, ExtClassLoader

public class Test {
    public static void main( String[] args )
        throws IOException {
        System.out.println( System.getProperty( "java.class.path" ) );
        
        // null,bootstrap classloader(不是ClassLoader实例)
        System.out.println( System.class.getClassLoader() );
        
        // sun.misc.Launcher$AppClassLoader@4089f3e5
        System.out.println( ClassLoader.getSystemClassLoader() );
        System.out.println( Test.class.getClassLoader() );
        
        // sun.misc.Launcher$ExtClassLoader@20eb607d
        System.out.println( ClassLoader.getSystemClassLoader().getParent() );
        System.out.println( Test.class.getClassLoader().getParent() );
    }
}

 

分享到:
评论

相关推荐

    java classloader classpath 张孝祥

    - **启动类加载器**(Bootstrap ClassLoader):是最顶层的类加载器,用于加载Java的核心库,如`rt.jar`等。 - **扩展类加载器**(Extension ClassLoader):由`sun.misc.Launcher$ExtClassLoader`实现,它用来加载...

    classloader-playground, 一个简单的java依赖隔离容器类.zip

    "classloader-playground"项目的核心是一个简单的Java依赖隔离容器类。在实际开发中,我们常常需要隔离不同模块之间的依赖,避免版本冲突或循环依赖等问题。类加载器可以在这方面发挥重要作用,通过定制类加载器,...

    Understanding the Java ClassLoader.pdf

    在深入探讨Java类加载器(ClassLoader)之前,我们首先需要了解它在Java运行时系统中的核心作用。类加载器是Java虚拟机(JVM)的一个关键组成部分,负责查找、加载和链接类文件到JVM中。它的存在使得Java应用程序...

    java api源代码

    Java API源代码是Java开发中的核心组成部分,它包含了Java标准库中的所有类和接口,这些类和接口构成了Java平台的基础。Sun Microsystems(后被Oracle收购)是Java的原始开发者,他们发布的源代码对于深入理解Java的...

    java rt包源代码

    4. **多线程**:`java.lang.Thread`类代表一个线程,`Runnable`接口定义了线程执行的任务。通过实现`Runnable`或继承`Thread`,可以创建并控制并发执行的线程。 5. **I/O流**:`java.io`包提供了输入/输出流的接口...

    w3school java & java web教程 飞龙整理 20141001

    1. **Java Standard Edition (JavaSE)**:适用于桌面应用和一般的服务器端应用开发,提供了基础的Java API,包括核心库和Java虚拟机(JVM)。 2. **Java Enterprise Edition (JavaEE)**:面向企业级应用,如Web应用...

    java编写的坦克大战游戏代码

    本文将深入探讨一款基于Java编写的坦克大战游戏代码,分析其核心机制和实现原理,帮助读者理解Java在游戏开发中的应用。 首先,我们要明确的是,"坦克大战"是一款经典的双人对战游戏,玩家通过控制坦克在地图上移动...

    Java高并发编程详解:多线程与架构设计 (Java核心技术系列)

    在第一部分,作者首先从线程的基础知识入手,细致地讲解了线程的生命周期、状态转换、优先级设置等概念,并通过`Thread`类的API展示了线程的创建、启动、挂起、终止等操作的具体实现。这一部分的学习对于理解Java...

    JAVA核心知识-面试用

    面试时,对Java核心知识的掌握程度往往成为衡量候选人能力的关键标准。以下是一些Java核心知识的详细阐述,这些知识点对于任何Java开发者,尤其是面试者来说,都是至关重要的。 1. **Java基础** - **数据类型**:...

    java 体系结构图,不错的总结,复习的资料

    Java是一种面向对象的、跨平台的编程语言,它的核心特性包括平台无关性、安全性、稳定性和高性能。这一切都得益于Java的“一次编写,到处运行”的理念,这得益于JVM(Java Virtual Machine)的存在。JVM是Java程序...

    java虚拟机

    Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为应用程序提供了一个抽象层,使其能在任何操作系统上运行,实现了“一次编写,到处运行”的跨平台特性。JVM是Java语言的...

    YOYOPlayer1.1.3 java播放器源代码

    YOYOPlayer1.1.3是一款基于Java语言开发的多媒体播放器软件,它的源代码公开提供了深入学习和理解Java编程、多媒体处理以及图形用户界面设计的机会。在这个版本中,开发者可能已经优化了性能,修复了已知问题,并...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    JAVA核心面试知识整理(全).rar

    "JAVA核心面试知识整理(全).rar"这个压缩包提供了一份详尽的资源,涵盖了Java面试中可能遇到的关键知识点。这份资料包括了"JAVA核心面试知识整理.pdf"文件,以下将对其中可能包含的内容进行详细阐述。 1. **Java...

    Java 基础核心总结.pdf

    Java的核心特性包括简单性、面向对象、健壮性、安全性、高性能、可移植性、多线程以及动态性。 1. **Java环境**: - **JDK (Java Development Kit)**:Java开发工具包,包含了编译器(javac)、JRE以及一些开发...

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    Java基础知识点 - 内容比较全面

    6. **Java中的synchronized使用**:synchronized用于实现线程同步,可以修饰方法或代码块,确保同一时刻只有一个线程执行特定代码,防止数据不一致。 7. **Java中的反射机制**:反射允许程序在运行时检查类、接口、...

    hannuota JAVA

    Java的核心特性之一就是面向对象编程(Object-Oriented Programming, OOP)。在Java中,一切皆为对象,对象是类的实例,而类是对象的蓝图。类定义了对象的属性(数据成员)和行为(方法)。封装、继承和多态是OOP的...

    java 动态编译.java文件,动态运行类 _1.1

    首先,Java提供了JavaCompiler接口,它是javax.tools包的一部分,允许我们在程序运行时动态编译Java源代码。以下是一些关键步骤和概念: 1. **获取Java工具提供商**:通过ToolProvider类,我们可以获取到Java...

    30种java技术框架图

    - **启动类加载器(Bootstrap ClassLoader)**:加载 Java 核心库(如 java.lang.* 包下的类),不可被应用程序直接引用。 - **扩展类加载器(Extension ClassLoader)**:加载扩展目录中的类库或被指定为扩展类库的 JAR...

Global site tag (gtag.js) - Google Analytics