JVM-类加载子系统
2024-09-05 06:08:45
类的生命周期
1.加载
将.class二进制字节流流从磁盘读到内存中(通过文件的全限定名读取)
2.连接
2.1验证:验证字节码文件的正确性
2.2准备:给类的静态变量分配内存,并赋予默认值(比如 int i = 0)
2.3解析:类装载器装入类所引用的其它类
3.初始化
为静态变量赋予正确的初始值,此阶段才是程序员编写的程序变量赋予真正的初始值,执行静态代码块
4.使用
通过执行引擎执行相应类的方法
5.卸载
生命周期结束有以下几种情况:1、程序正常执行结束 2、执行中出现异常 3、操作系统出现异常 4、通过执行 system.exit()
类加载器的种类(主要)
启动类加载器(Bootstrap ClassLoader):负责加载JRE核心类库,像JRE中的rt.jar等(C/C++);
扩展类加载器(Extension ClassLoader):负责加载JRE扩展目录ext中的jar包;
系统类加载器(Application ClassLoader):负责加载ClassPath路径下的类包;
类加载机制
1.全盘负责委托机制(比较古老)
当一个ClassLoader加载一个类时,需要按需加载其它类的时候,那该类也由这个ClassLoader载入,比如一个A类加载是由Application ClassLoader载入,这个A类引用了B类,这时B类也将由Application ClassLoader载入。
2.双亲委派机制(parent译义为双亲)
总结:
1.安全机制:防止用户自定义类篡改核心类库,比如自定义String.class类不会被加载,如果这个String类被加载了那相当于Java的String类被替代了。这是不允许的。
2.避免类的重复加载:当父类ClassLoader加载了一个类的时候,这个类不需要被其它ClassLoader再次加载。
最新文章
- svn迁移gitlab,构建前端打包发布流程
- 用 Excel 测试“绘制两点间连线”的算法
- sqlserver 2008 数据库表结构脚本及数据导出
- 手机触屏触摸特效javascript-TouchSwipe(依赖于jquery库)中文说明
- kafka集群zookeeper集群详细配置
- 金蝶BOS
- eq相等 ,ne、neq不相等 EL表达式
- PC-博客首页中增加必应或GOOGLE搜索功能
- 分分钟教你集成沉浸式侧滑关闭Activity
- C# List<;T>;的详细用法
- C#打印杨辉三角
- java之servlet入门操作教程一续
- quartz定时任务实例
- (后端)Sql Server日期查询-SQL查询今天、昨天、7天内、30天(转)
- SQL SERVER按多字段查找重复的数据并删除只保留一条
- react-native中的请求数据
- NginxI/O模型理论基础
- Mongo分区后分片下count记录不准确
- QQ公众号?是的,你没看错!
- JavaScript学习总结(十三)——极简主义法编写JavaScript类
热门文章
- 【转】Linux下常用压缩 解压命令和压缩比率对比
- Service Broker 消息队列的方式实现数据同步
- webSocket的场景应用
- 简单的JAVAWeb选课系统
- WebLogic 12c 版 下载与安装(ubuntu)
- mybatis+mysql批量插入和批量更新
- Jekyll添加FancyBox 插件
- 【题解】间隔排列-C++
- focus([[data],fn]) 	当元素获得焦点时,触发 focus 事件。
- Web service stop after running serveral hours