深入理解JVM类加载:Singleton模式与内存剖析
需积分: 19 22 浏览量
更新于2024-09-16
收藏 367KB PDF 举报
本篇JVM类加载学习笔记深入探讨了Java虚拟机(JVM)的工作原理,特别是类加载器机制。在Java中,类加载器是负责将.class字节码文件转换成可执行的Java类,并将其放入JVM运行时环境中的内存区域。它遵循"类的双亲委派模型",确保了对标准库和第三方库类的统一加载。
1. **类加载器(Classloader)**: Java中的类加载器分为启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。每个类加载器都有自己的职责范围,且互不干扰。当一个类被请求加载时,如果该类尚未被加载,会按照从上到下的顺序逐级委派给父加载器来查找和加载。
2. **`Singleton` 示例**: 提供了一个名为`Singleton`的类,其中包含一个单例模式实现。`Singleton`类有两个静态变量`a`和`b`,以及一个私有构造函数,保证了类实例的唯一性。通过`GetInstence()`方法获取这个单例实例。在`MyTest`类的`main`方法中,展示了如何通过`GetInstence`方法创建并访问`Singleton`对象的静态成员。
3. **双亲委派模型**: 当`MyTest`中的`Singleton.GetInstence()`被调用时,JVM并不会立即创建新的类实例,而是先由应用类加载器尝试加载。如果找不到,它会递交给扩展类加载器,最后交给启动类加载器。如果所有父加载器都未能找到,才会在当前类加载器中加载。这样设计是为了避免重复加载和提高安全性。
4. **类加载时机**: 类只有在第一次被请求加载时才会进行实际的加载和初始化。`Singleton`类的静态变量`a`和`b`在类加载时会被初始化为0,而实例化的次数则通过构造函数`singleton()`控制。
5. **内存管理**: 类加载完成后,类的字节码会被存储在堆内存中,而静态变量存储在方法区(现在称为元空间)。当程序结束时,类加载器会卸载不再使用的类,以节省内存。
总结来说,这篇笔记重点介绍了JVM的类加载过程、类加载器的层次结构、双亲委派模型的应用以及类的静态变量初始化时机。理解这些概念有助于开发人员更好地掌握Java程序的运行机制,优化代码性能和处理依赖关系。
2011-05-07 上传
2013-01-16 上传
2019-02-17 上传
2019-03-31 上传
2019-01-03 上传
2020-12-20 上传
2019-04-26 上传
2014-07-25 上传
2021-01-21 上传
汤姆先生
- 粉丝: 5
- 资源: 19
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍