第七章 类型的生命周期
1. 类型装载、链接与初始化

装载:将二进制形式的Java类型读入Java虚拟机中;
连接:将二进制形式的类型数据合并到迅即的运行时状态中去;
A. 验证:确保Java类型数据格式正确并且适用于Java虚拟机适用;
B. 准备:负责为该类型分配它所需的内存环境;(如类变量分配内存)
C. 解析:负责将常量池中的符号应用转换为直接引用;
初始化:给类变量赋予适当的初始值;
JVM严格定义了初始化的时机,所有的Java虚拟机实现必须在每个类或者接口的首次主动使用时初始化:
1. 当创建这个类的新实例时(或者通过字节码执行new指令,或者反射,克隆,反序列化)
2. 调用某个类的静态方法
3. 使用这个类或者接口的静态字段,或者是对这个字段赋值(final修饰的字段除外,编译阶段被初始化为常量表)
4. 当调用Java API 中的某些反射方法时,比如Class中的方法或者java.lang.reflect包中的方法
5. 当初始化某个类的子类时;
6. 当标明为启动类时(含main方法的那个类)
被动使用:父类中声明的字段被子类引用,在子类中调用父类这个变量时,是不是初始化自己的;
1. 装载
3个基本动作:a 通过该类型的完全限定名,产生一个代表该类型的二进制数据流
b 解析这个二进制数据流为方法区内的内部数据结构
c 创建一个表示该类型的java.lang.Class类的实例
2. 连接
验证: 确认类型符合Java语言的语义,并且他不会危及虚拟机的完整性(父类的装载(有的话),final的验证,符号引用的验证。。。)
准备: 为类变量分配内存空间,设置默认初始值
解析:将符号引用转化为直接引用的过程
3. 初始化:赋予正确的初始值
1) 如果类存在直接的超类,且还没有初始化的话,就先初始化超类(接口除外)
2) 如果类存在一个类初始化方法,就执行此方法
3) 初始化的过程是同步的
2. 对象的生命周期
1. 类的实例化:(4个方式,不多说了)
当Java虚拟机创建一个类的新实例时,不管是明确的还是隐含的,首先都需要在堆中为保存对象的实例变量分配内存,所有在对象的类中它的超类中声明的变量都要分配内存。
2. 垃圾回收和对象的终结
程序可以明确或者隐含地位对象分配内存,但是不能明确地释放内存。如果类声明了一个名为finalize()的返回void的方法,垃圾收集器会在释放这个实例所占据的内存空间之前执行这个方法(被称为终结方法)一次。垃圾收集器最多只会调用一个对象的终结方法一次(在对象变成不再被引用的之后的某个时候,在占据的对象被重用之前)。
3. 卸载类型
使用启动类装载器装载的类型永远是可触及的,所以永远不会被卸载,只有使用用户自定义类装载器装载的类型才会变成不可触及的。
判断动态装载的类型Class实例在正常的垃圾收集过程中是否可以触及有两种方式,第一,也是最明显的,如果程序保持对Class实例的明确引用,它就是可触及的。其次,如果在堆中还存在一个触及的对象,在方法区中它的类型数据指向一个Class实例,那么这个Class实例就是可触及的。
分享到:
相关推荐
Java程序的运行依赖于Java虚拟机(JVM),这意味着只要目标系统安装了相应的JVM,Java程序就能在其上运行。这种特性确保了Java“一次编写,到处运行”的跨平台性。 - **开发步骤**: 1. **编写源文件**:使用`.java`...
matlab
2023年新版中国医科大学考试计算机基础与应用在线作业.doc
2023年四川省计算机一级计算机基础知识题库.docx
matlab
移动开发是指为移动设备(如智能手机、平板电脑)开发应用程序的过程。常见的移动开发平台包括 Android 和 iOS,开发语言可以是 Java、Kotlin(Android)、Swift 或 Objective-C(iOS)。以下是一个基于 **Android** 的简单例子,展示如何创建一个带有按钮和文本的交互式应用。 --- ### **示例:点击按钮显示消息** #### **功能描述** - 应用包含一个按钮和一个文本框。 - 点击按钮时,文本框显示一条消息(例如 "Hello, World!")。 --- ### **开发环境** - **工具**:Android Studio - **语言**:Java 或 Kotlin - **框架**:Android SDK --- ### **代码实现(使用 Kotlin)** 1. **项目结构** - 创建一个新的 Android 项目,选择 Empty Activity 模板。 - 项目文件结构如下: ``` app/ src/ main/ java/com/example/myapp/MainActivity.kt res/layout/activity_main.xml ``` 2. **布局文件 (`activity_main.xml`)** 在 `res/layout/activity_main.xml` 中定义界面布局: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
内容概要:本文详细介绍了在MATLAB环境中实现GA_PSO混合算法的方法及其应用场景。该算法将遗传算法(GA)和粒子群优化算法(PSO)相结合,用于解决复杂的多峰优化问题。文中首先定义了适应度函数Rastringin函数,并展示了如何通过MATLAB代码实现混合算法的关键步骤,包括粒子群初始化、速度和位置更新、遗传操作(交叉和变异)、以及参数设置。此外,文章还讨论了如何处理约束条件,并提供了动态可视化的实现方法,以便更好地理解和展示算法的运行过程。 适用人群:适用于具有一定MATLAB编程基础和技术背景的研究人员、工程师以及学生,特别是那些对优化算法感兴趣的人。 使用场景及目标:该混合算法主要用于解决具有多个局部极值点的复杂优化问题,特别是在高维空间中寻找全局最优解。通过结合GA的全局搜索能力和PSO的局部搜索效率,能够有效地避免陷入局部最优解,提高求解精度和稳定性。 其他说明:建议读者根据具体问题调整相关参数,如交叉概率、变异率、惯性权重等,以获得最佳性能。同时,可以通过修改目标函数来测试算法在不同类型问题上的表现。
2023年西工大秋计算机辅助设计在线作业.doc
2023年spss软件分析异常值检验实验报告.doc
内容概要:本文详细介绍了如何使用MATLAB/Simulink R2015b搭建Buck-Boost变换器的开环和闭环控制仿真模型。首先,作者解释了Buck-Boost变换器的基本构成及其在电源设计中的重要性。接着,逐步指导读者构建开环模型,包括设置关键参数如PWM频率、占空比、输入电压等,并展示了开环控制下的输出特性。随后,引入了PID控制器进行闭环控制,强调了PID参数的选择与调整方法,以及如何通过增加电压采样和误差比较来提高系统的稳定性。此外,还分享了一些常见的仿真错误及解决方案,如电感值选取不当、二极管模型过于理想等问题。最后,提供了几个有趣的实验案例,如动态改变占空比、突变负载等,以展示闭环控制的优势。 适合人群:具有一定电力电子和MATLAB/Simulink基础的技术人员或学生。 使用场景及目标:适用于希望深入理解Buck-Boost变换器工作原理及其控制策略的研究者和技术爱好者。通过动手实践,掌握开环与闭环控制的区别,学会优化PID参数,提升电源设计能力。 其他说明:文中附有多处代码片段和实用技巧,有助于读者更好地理解和应用所学知识。同时提醒读者注意不同MATLAB版本间的兼容性问题。
matlab
2023年软件测试工程师考核标准.docx
chromedriver-win64-137.0.7117.2.zip
内容概要:本文详细介绍了基于C#的工业自动化通信开发库,涵盖了多种常见的通信协议和技术。首先讨论了串口通信的基础操作及其注意事项,如波特率设置和事件处理。接着深入探讨了TCP通信,特别是针对高并发场景下的粘包处理和性能优化。文中还详细讲解了Modbus协议的应用,包括RTU和TCP两种模式的具体实现和常见问题解决方法。此外,文章涉及了数据库操作的最佳实践,尤其是EF6与MySQL的配合使用,以及数据转换技巧,如字节序处理和布尔值提取。最后,简述了消息队列(如RabbitMQ)和CAN总线的使用场景和配置要点。每个部分都配有实际代码示例,帮助开发者更好地理解和应用这些技术。 适合人群:从事工业自动化领域的软件开发工程师,尤其是那些需要频繁处理通信协议和数据交互的技术人员。 使用场景及目标:适用于需要进行PLC通信、数据采集、监控系统集成等项目的开发人员。主要目标是提高开发效率,减少因协议复杂性和数据格式差异带来的困扰,确保系统的稳定性和可靠性。 其他说明:文章不仅提供了理论指导,还分享了许多实际项目中的经验和教训,强调了在真实环境中可能会遇到的问题及解决方案。对于初学者而言,可以作为入门指南;对于有一定经验的开发者,则可以作为参考手册,帮助他们优化现有系统并避免常见错误。
内容概要:本文档详细介绍了基于灰狼优化算法(GWO)优化逐次变分模态分解(SVMD)的MATLAB项目实例。项目旨在通过GWO优化SVMD中的关键参数(如模态数、惩罚因子等),提高信号分解的精度和效率,解决传统SVMD方法面临的参数选择和优化挑战。GWO算法通过模拟灰狼捕猎行为,实现全局搜索和局部搜索的平衡,增强了SVMD在处理非线性、非平稳和含噪信号时的能力。文档涵盖了项目背景、目标与意义、挑战及解决方案、特点与创新、应用领域、效果预测图程序设计及代码示例、模型架构、算法流程、目录结构设计、注意事项、扩展方向、部署与应用、未来改进方向、总结与结论以及详细的程序设计思路和具体代码实现。 适合人群:具备一定编程基础,特别是熟悉MATLAB和信号处理技术的研发人员,以及从事机械故障诊断、生物医学信号分析、地震信号处理、无线通信和金融市场分析等领域工作的工程师和研究人员。 使用场景及目标:①优化SVMD中的参数设置,提高信号分解的精度和效率;②处理非线性、非平稳和含噪信号,提取有用的特征;③应用于机械故障诊断、生物医学信号分析、地震信号处理、无线通信和金融市场分析等领域;④提供信号噪声抑制功能,减少噪声干扰,确保信号中的有用信息被充分提取;⑤拓宽算法的应用范围,为相关领域的信号处理提供高效、精确的工具。 其他说明:本项目不仅提供了详细的理论背景和技术实现,还附带了完整的代码示例和GUI设计,便于用户实践和调试。项目强调了数据质量和参数调整的重要性,同时对未来改进方向进行了展望,如引入深度学习技术、多模态信号融合、实时故障诊断功能、端到端加速、数据隐私保护与合规性、扩展到边缘计算平台、自动化模型训练与优化、系统的自我修复能力等。通过本项目的成功实现,可以为信号处理领域提供一种更加高效、精确、可靠的解决方案。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
2023年操作系统题库.docx
内容概要:本文档介绍了基于MATLAB实现的建设工程风险决策多目标优化项目,该研究结合云模型和遗传算法,旨在优化建筑工程中的风险管理决策。项目首先阐述了背景与目标,强调了优化建筑工程风险管理、提高成本效益、增强风险预测能力的重要性。接着,文档详细描述了项目挑战及解决方案,包括模型准确性、计算效率、不确定性处理等方面。项目特点与创新在于综合运用云模型和遗传算法,引入自适应优化算法,并基于大数据进行风险预测。应用领域涵盖建筑工程管理、制造业风险决策、能源与环境管理、交通运输行业和金融风险管理。文档还展示了项目的效果预测图、程序设计及代码示例,涵盖了数据预处理、云模型风险评估、遗传算法优化、多目标优化决策和结果可视化等模块。最后,文档讨论了项目的未来改进方向,如模型多样化、云平台优化、增强智能决策支持等。 适合人群:具备一定编程基础,尤其是熟悉MATLAB的工程师和研究人员,以及从事建筑工程管理、风险管理和多目标优化领域的专业人士。 使用场景及目标:①理解云模型和遗传算法在建筑工程风险管理中的应用;②掌握多目标优化的具体实现方法和技术细节;③学习如何构建和优化基于云模型和遗传算法的风险决策系统;④应用于实际建筑工程管理和其他相关领域的风险管理决策。 其他说明:此项目不仅为建筑工程的风险管理提供了科学依据,还为其他行业的多目标决策优化提供了技术参考。项目代码详尽,从环境准备、数据处理到模型训练和评估均有详细示例,便于学习和实践。同时,项目强调了数据质量和模型参数选择的重要性,为后续研究和应用提供了宝贵的经验和指导。
matlab
基于stm32的控制底层