package com.zqflc.reflction; /** * 测试 JDK 加载类的顺序 * @author Administrator * */ public class TestDynamicLoading { public static void main(String[] args) { /** * JDK 并不是一次性把所有的一个类用到的类load进来, 而只有在用到一个类的时候才会把这个类给load进来 * 运行的时候在 虚拟机处 加 -verbose:class 参数可以看到JDK 所加载的类 */ new A(); System.out.println("-------------------------------------"); new B(); new C(); new C(); new D(); new D(); } } class A {} class B {}; class C { public C(){ System.out.println("constraction."); }; // static 块只加载一次, 全局只有一份 static { System.out.println("-------CCCCCCCCCCCCCCCCCCCCC--------"); } } class D { // 动态语句块会加在每个构造方法的前面, 每一次都会执行 { System.out.println("-------DDDDDDDDDDDDDDDDDDDDD--------"); } }
您还没有登录,请您登录后再发表评论
然后,加载类所引用的其它所有类,并为类的静态变量赋予真正的初始值;之后,执行静态代码块进行初始化;类被加载到内存后,即可供程序使用;最后,当类不再被使用时,会被卸载出内存。 在JVM中,存在不同种类的类...
为了更好地调试和分析程序,JDK还提供了`jconsole`、`jvisualvm`等可视化工具,它们可以帮助开发者监控和分析Java应用程序的性能,查看线程、内存、类加载器等信息。 总的来说,通过JDK提供的各种工具和IDE的支持,...
- **Cache机制**:类加载器使用缓存机制,即首次加载类后,会将类的信息保存在缓存中,再次请求相同类时,直接从缓存中获取,提高加载效率。 #### 二、JDK的classloader机制实战 **2.1 动态加载与更新** 在某些...
- **记录类的增强**:JDK17对记录类进行了进一步优化,使得它们在编译时能生成更高效的字节码。 - **开关表达式扩展**:开关表达式在JDK17中得到了增强,支持更多的模式匹配,使得代码更加简洁和易于理解。 - **文本...
- `launcher`目录:这是JDK启动器的源代码,负责解析命令行参数,加载并启动Java应用程序。 除了这些,JDK源码还包括了`javax`、`com`和`org`等包,它们通常包含了特定的功能模块或第三方库。例如,`javax`包包含...
双亲委派模型的工作流程是:从顶层的Bootstrap ClassLoader开始,逐级向下尝试加载类,直到找到能加载的类为止。 通过深入JDK源码,我们可以更清晰地理解类加载机制的细节,从而在遇到问题时能迅速定位并解决。对于...
3. **launcher**: 这可能包含了Java应用程序的启动器源码,比如`java.exe`或`javaw.exe`,它们负责解析命令行参数,加载类,以及启动Java虚拟机(JVM)。 4. **java**: 这个目录可能包含了Java标准库的部分源代码,...
在JDK中,`sun.misc.Launcher`是Java应用程序的启动类,负责加载JVM(Java Virtual Machine)和初始化Java应用程序的主要类。它管理类加载器,确保正确的类被加载并执行。`Launcher`类的工作包括解析命令行参数,...
为了提升JDK的启动速度和内存使用效率,还可以关注类加载机制和模块系统。了解ClassLoader的工作原理,可以优化类加载顺序,减少不必要的资源消耗。Java 9引入的模块系统(Jigsaw)通过封装和隔离,可以降低程序的...
1. 当尝试调试Java程序,尤其是在涉及JDK内部类或方法时,会发现无法查看JDK源代码的变量。这是因为默认的JDK库中并未包含调试信息。 2. 解决方法是在项目的系统库中添加`debug_rt.jar`。在Eclipse等IDE中,这通常...
1. **定义**:`CLASSPATH`环境变量用于指定Java虚拟机加载类(class)或资源文件(resource file)的路径。 2. **作用**: - 指定编译或运行时查找用户类和资源文件的位置。 - 如果不设置`CLASSPATH`,默认情况下...
在Java编程语言中,动态加载类机制是一种强大的功能,它允许程序在运行时根据需要加载新的类或资源,而不是在编译时确定所有类。这种技术对于提高软件的灵活性、可扩展性和模块化至关重要,特别是在大型系统和插件式...
- 类数据共享(Class Data Sharing, CDS):可以优化启动时间,通过预先加载类数据到共享归档文件来减少JVM启动时的内存占用。 - 对JSON支持的增强:包括内置的JSON-P(Java API for JSON Processing)和JSON-B...
4. **JVM(Java虚拟机):** 包括内存模型、垃圾收集、类加载机制、JIT编译器优化等内容。 5. **模块系统(Project Jigsaw):** JDK 9引入的模块系统,增强了代码的组织和封装。 6. **Java编程最佳实践:** 如...
5. **安全性组件**:IBM JDK提供了一套安全模型,包括类加载器、访问控制、代码签名等,以确保Java应用程序的运行安全。 6. **性能监控和管理工具**:如jconsole或IBM自己的VisualVM工具,可以帮助开发者监控应用...
5. **强引用与弱引用的改进**:JDK 11增强了`PhantomReference`类,使得开发者可以更精确地控制对象的生命周期,优化内存管理。 6. **改进的垃圾收集器**:JDK 11提供了G1垃圾收集器的并行Full GC,以及ZGC(Z ...
10. **类加载机制**:JDK11的类加载机制仍然遵循“双亲委派模型”,源码中的`java.lang.ClassLoader`类及其子类展示了如何加载和查找类。 通过深入研究JDK11源码,开发者不仅可以了解到Java语言的最新发展,还能...
3. **JVM优化**:JDK 1.6对JVM进行了多方面的优化,包括更高效的垃圾回收机制、改进的类加载器以及对动态语言的支持等,这提升了Java应用程序的运行效率。 4. **JavaDoc**:这是一个文档生成工具,可以自动生成源...
- 类加载器的改进,支持更好的隔离和安全控制。 - 多线程性能的优化,包括`ForkJoinPool`的调整和`ThreadLocal`的内存管理。 综上所述,JDK 1.9的API文档不仅包含了全面的类和方法解释,还体现了Java语言在模块化、...
1. **Java虚拟机(JVM)的工作机制**:Sun JDK中的源码揭示了JVM如何加载类、执行字节码、垃圾收集等关键过程。例如,`java.lang.ClassLoader`类展示了如何动态加载类,`java.lang.reflect`包提供了对反射的支持。 ...
相关推荐
然后,加载类所引用的其它所有类,并为类的静态变量赋予真正的初始值;之后,执行静态代码块进行初始化;类被加载到内存后,即可供程序使用;最后,当类不再被使用时,会被卸载出内存。 在JVM中,存在不同种类的类...
为了更好地调试和分析程序,JDK还提供了`jconsole`、`jvisualvm`等可视化工具,它们可以帮助开发者监控和分析Java应用程序的性能,查看线程、内存、类加载器等信息。 总的来说,通过JDK提供的各种工具和IDE的支持,...
- **Cache机制**:类加载器使用缓存机制,即首次加载类后,会将类的信息保存在缓存中,再次请求相同类时,直接从缓存中获取,提高加载效率。 #### 二、JDK的classloader机制实战 **2.1 动态加载与更新** 在某些...
- **记录类的增强**:JDK17对记录类进行了进一步优化,使得它们在编译时能生成更高效的字节码。 - **开关表达式扩展**:开关表达式在JDK17中得到了增强,支持更多的模式匹配,使得代码更加简洁和易于理解。 - **文本...
- `launcher`目录:这是JDK启动器的源代码,负责解析命令行参数,加载并启动Java应用程序。 除了这些,JDK源码还包括了`javax`、`com`和`org`等包,它们通常包含了特定的功能模块或第三方库。例如,`javax`包包含...
双亲委派模型的工作流程是:从顶层的Bootstrap ClassLoader开始,逐级向下尝试加载类,直到找到能加载的类为止。 通过深入JDK源码,我们可以更清晰地理解类加载机制的细节,从而在遇到问题时能迅速定位并解决。对于...
3. **launcher**: 这可能包含了Java应用程序的启动器源码,比如`java.exe`或`javaw.exe`,它们负责解析命令行参数,加载类,以及启动Java虚拟机(JVM)。 4. **java**: 这个目录可能包含了Java标准库的部分源代码,...
在JDK中,`sun.misc.Launcher`是Java应用程序的启动类,负责加载JVM(Java Virtual Machine)和初始化Java应用程序的主要类。它管理类加载器,确保正确的类被加载并执行。`Launcher`类的工作包括解析命令行参数,...
为了提升JDK的启动速度和内存使用效率,还可以关注类加载机制和模块系统。了解ClassLoader的工作原理,可以优化类加载顺序,减少不必要的资源消耗。Java 9引入的模块系统(Jigsaw)通过封装和隔离,可以降低程序的...
1. 当尝试调试Java程序,尤其是在涉及JDK内部类或方法时,会发现无法查看JDK源代码的变量。这是因为默认的JDK库中并未包含调试信息。 2. 解决方法是在项目的系统库中添加`debug_rt.jar`。在Eclipse等IDE中,这通常...
1. **定义**:`CLASSPATH`环境变量用于指定Java虚拟机加载类(class)或资源文件(resource file)的路径。 2. **作用**: - 指定编译或运行时查找用户类和资源文件的位置。 - 如果不设置`CLASSPATH`,默认情况下...
在Java编程语言中,动态加载类机制是一种强大的功能,它允许程序在运行时根据需要加载新的类或资源,而不是在编译时确定所有类。这种技术对于提高软件的灵活性、可扩展性和模块化至关重要,特别是在大型系统和插件式...
- 类数据共享(Class Data Sharing, CDS):可以优化启动时间,通过预先加载类数据到共享归档文件来减少JVM启动时的内存占用。 - 对JSON支持的增强:包括内置的JSON-P(Java API for JSON Processing)和JSON-B...
4. **JVM(Java虚拟机):** 包括内存模型、垃圾收集、类加载机制、JIT编译器优化等内容。 5. **模块系统(Project Jigsaw):** JDK 9引入的模块系统,增强了代码的组织和封装。 6. **Java编程最佳实践:** 如...
5. **安全性组件**:IBM JDK提供了一套安全模型,包括类加载器、访问控制、代码签名等,以确保Java应用程序的运行安全。 6. **性能监控和管理工具**:如jconsole或IBM自己的VisualVM工具,可以帮助开发者监控应用...
5. **强引用与弱引用的改进**:JDK 11增强了`PhantomReference`类,使得开发者可以更精确地控制对象的生命周期,优化内存管理。 6. **改进的垃圾收集器**:JDK 11提供了G1垃圾收集器的并行Full GC,以及ZGC(Z ...
10. **类加载机制**:JDK11的类加载机制仍然遵循“双亲委派模型”,源码中的`java.lang.ClassLoader`类及其子类展示了如何加载和查找类。 通过深入研究JDK11源码,开发者不仅可以了解到Java语言的最新发展,还能...
3. **JVM优化**:JDK 1.6对JVM进行了多方面的优化,包括更高效的垃圾回收机制、改进的类加载器以及对动态语言的支持等,这提升了Java应用程序的运行效率。 4. **JavaDoc**:这是一个文档生成工具,可以自动生成源...
- 类加载器的改进,支持更好的隔离和安全控制。 - 多线程性能的优化,包括`ForkJoinPool`的调整和`ThreadLocal`的内存管理。 综上所述,JDK 1.9的API文档不仅包含了全面的类和方法解释,还体现了Java语言在模块化、...
1. **Java虚拟机(JVM)的工作机制**:Sun JDK中的源码揭示了JVM如何加载类、执行字节码、垃圾收集等关键过程。例如,`java.lang.ClassLoader`类展示了如何动态加载类,`java.lang.reflect`包提供了对反射的支持。 ...