在Java虚拟机的垃圾回收器看来,堆区中的每个对象可能处于以下三个状态之一
可触及状态:当一个对象(假定为simple)被创建后,只要程序中还有引用变量引用它,那么它就处于可触及状态
可复活状态:当程序中不再有任何引用变量引用simple对象时,它就进入可复活状态。在这个状态中。垃圾回收器会准备释放它的资源,在释放之前,会调用它的或者其他处于可复活状态的对象的finalize()方法,这些finalize()方法有可能使对象重新转到可触及状态
不可触及状态:执行完finalize()方法后,如果没有使simple对象进入可触及状态,那么simple对象就进入不可触及状态。处于不可触及状态的对象,垃圾回收器会回收内存。
垃圾回收的时间 在程序中可以调用system.gc()或者Runtime.gc()方法提示垃圾回收器尽快的执行垃圾回收操作,但是这也不能保证调用该方法后,垃圾回收线程立即执行回收操作。
对象的finalize()方法的特点
(1) 垃圾回收器是否会执行该方法及什么时候执行该方法都是不确定的。
(2) Finalize()方法有可能使对象复活,使它处于可触及状态
(3) 垃圾回收器在执行finalize()方法时,如果出现异常,垃圾回收器不会报告异常,程序继续正常运行
具有实例缓存的不可变类 在jdk1.5的基本类库中,对一些不可变类,如Integer类做了优化,它具有一个实例缓存,用来存放程序中经常使用的Integer实例。JDK1.5的Integer类新增了一个参数,为int类型的静态工厂方法valueOf(int i),它的处理流程如下:
If ( 在实例缓存中存在取值为i 的实例){
直接返回这个类型
}
Else{
用new 语句创建一个取值为i 的Integer实例
把这个实例存放在实例缓存中
返回这个实例
}
- 大小: 24.3 KB
分享到:
相关推荐
9.11 对象可触及性的生命周期 9.11.1 引用对象 9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“Heap of Fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集 9.12...
9.11 对象可触及性的生命周期 9.11.1 引用对象 9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“Heap of Fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集...
9.11 对象可触及性的生命周期 9.11.1 引用对象 9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“Heap of Fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾...
9.11 对象可触及性的生命周期 9.11.1 引用对象 9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“heap of fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集...
封装确保了对象的内部状态只能通过类定义的公共方法来访问和修改,外部代码无法直接触及对象的内部数据结构,从而增强了代码的模块性和安全性。 3. 继承:继承是面向对象编程中的一个核心概念,它允许新创建的类...
"java面向对象理解" Java 面向对象编程是 Java 语言的核心概念之一。...Java 面向对象编程是一种强大的编程范式,能够帮助程序员更好地模拟现实世界中的对象交互,提高代码的可维护性和可重用性。
【视觉中心与外在对象的自返同一性】这一主题主要探讨了现象学中的感知对象如何在意识中形成自我...通过对内感觉的分析,它揭示了知觉的复杂性和可能的误导性,同时也触及了现象学和逻辑学在理解意识经验上的相互作用。
多态性通过子类覆盖父类的方法实现,这样,即使调用的是同名方法,不同的对象也可以执行不同的操作,增加了代码的灵活性和可扩展性。 类是对象的模板,它定义了一组属性和行为。对象是类的实例,每个对象都有其独特...
设计面向对象软件是一项复杂且极具挑战性的任务,尤其是当目标是创建可复用的软件时。这一过程不仅涉及到识别关键对象,确定它们的适当粒度,定义类的接口和继承结构,还要求建立并维护对象间的关系,确保设计既针对...
通过理解面向对象的思维方法,并在实践中不断应用,开发者可以编写出更加灵活、可扩展的代码,同时提高代码的可读性和维护性。在Java中,面向对象编程不仅是技术层面的选择,更是解决问题的一种哲学。
此外,同步数据的讨论触及了面向对象中的多态性。在数据同步的过程中,通过调用SqlCeReplication对象的Synchronize()方法,可以实现数据的合并复制。这个过程中,只有对数据的修改才会被发送和接收,这一特性充分...
在面向对象设计中,降低耦合度是提高系统灵活性和可扩展性的关键。通过接口和抽象类的使用,可以减少类与类之间的直接依赖,从而达到解耦的目的。 #### 运作与建造 面向对象设计关注系统的动态行为,包括对象之间...
面向对象软件测试是软件开发过程中不可或缺的一环,它在传统软件测试的基础上增加了许多新的挑战和考虑因素。在传统的结构化软件测试中,测试通常基于线性的瀑布模型,侧重于对数据处理流程的验证。然而,面向对象...
面向对象编程设计原则是软件开发中的核心指导思想,旨在提高软件的可维护性和可复用性。以下是对这些原则的详细解释: 1. **单一职责原则(SRP)**:该原则指出,一个类或模块应只有一个明确的责任或变更的原因。这...
3. **信息隐藏**:信息隐藏依赖于对象的封装性,类的用户只能看到接口,而不直接触及内部实现,降低了复杂性,增强了系统的稳定性和可维护性。 4. **弱耦合**:弱耦合意味着不同对象间的关联度较低,这样即使系统中...
【标题】:基于心理学角度应对采访对象不合作的策略 ...通过上述心理学技巧的应用,记者可以有效地应对采访对象的不合作,提高采访的成功率,同时增强双方的互动和理解,确保新闻报道的质量和真实性。
### 程序员从触及到中级10个秘诀 #### 秘诀一:学习另一门语言 在程序员的成长道路上,学习一门新的编程语言是非常重要的一步。这不仅可以扩展你的技能树,还能帮助你理解不同语言的设计哲学和技术特点。例如,...
【标题】"基于MFC的面向对象大作业"是一个典型的计算机科学...然而,对于想要深入研究MFC和C++的开发者来说,这个项目可能只触及了皮毛,他们需要进一步学习MFC的高级特性,如文档/视图架构、ActiveX控件、网络编程等。