`

内存管理与垃圾收集(三)

阅读更多
                                内存管理与垃圾收集(三)
                                           ----垃圾收集前的处理工作
    对象被作为垃圾清理出内存之前,有可能需要一些扫尾的工作,在Java中这些扫尾工作的代码可以编写在被收集对象的finalize方法之中。

(1)finalize方法的重写
    finalize方法来自Object类,因此每一个类都有此方法。在一个对象被作为垃圾收集之前,垃圾收集器会首先调用垃圾收集对象的finalize方法,然后再清除垃圾对象。如果在对象被垃圾收集时希望系统执行特定的代码,就需要重写finaliz方法。
    重写此方法时一般不但要编写自己类特定的处理代码,还应该使用"Super.finalize();"调用父类的finalize方法。如果没有重写该方法,则在垃圾收集时会调用父类的此方法,直至追溯到Object类的finalize方法。

(2)finalize方法的安全问题
   如果在finalize方法中编写一些恶意代码,在每次执行finalize方法时使自己这个对象不再满足垃圾的条件,就可以阻止垃圾收集,产生恶意的常驻对象。
   为避免上述情况,在Java中规定,一个对象的声明周期中finalize方法最多被执行一次。也就是说,若第一次执行垃圾收集时执行此方法组织了垃圾收集,第二次在执行垃圾收集时不会再执行此方法,而是直接清除垃圾对象。

(3)最终守护者模式
   如果开发人员概念理解不深刻,在重写finalize方法时忘记级联调用父类的finalize方法,这时有可能会带来严重的问题。
注:构造器的自动级联调用机制设计得就非常好,避免了类似问题的发生。
   java中有很多的设计模式,父类的开发人员可以通过使用最终守护者模式来避免此问题的发生。
分享到:
评论

相关推荐

    理解JAVA虚拟机-内存管理、垃圾收集器.pptx

    讲解java虚拟机 包括内存模型,内存管理,垃圾回收算法,垃圾回收调优,arthas、jmap内存问题排查

    内存管理内存管理内存管理

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    操作系统(内存管理)

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    jvm内存管理和垃圾回收

    很久之前就一直在学习JVM,但是一直也没有好好的总结,最近终于有了空闲,将之前学习的内容整理成了一个PPT。 也希望大神们可以批评指正。 ppt中主要包含下面几部分: Java内存模型 ... 垃圾收集器

    Java理论与实践:垃圾收集简史

    本文介绍了垃圾收集的好处是无可争辩的--可靠性提高、使内存管理与类接口设计分离,并使开发者减少了跟踪内存管理错误的时间。不过,垃圾收集不是没有代价的--其中包括对性能的影响、暂停、配置复杂性和不确定的结束...

    《垃圾收集》(Garbage Collection)扫描版[PDF]——part3

    书围绕着动态内存自动回收的话题,介绍了垃圾收集机制,详细分析了各种算法和相关技术。  本书共12章。第1章首先介绍计算机存储器管理的演化... 本书适合对动态内存管理感兴趣的读者阅读,可供专业的研究人员参考。

    java内存管理 ppt

    java内存结构,垃圾收集,并发收集,虚拟机参数

    JVM调优与内存管理总结

    JVM内存调优,java内存管理总结。包含新生代、老年代等详解。还有垃圾回收收集器详解。

    C# 2.0 内存管理和指针

    本章介绍内存管理和内存访问的各个方面。...● 垃圾收集的工作原理 ● 如何使用析构函数和System.IDisposable接口来确保正确释放未托管的资源 ● C#中使用指针的语法 ● 如何使用指针实现基于堆栈的高性能数组

    垃圾回收:在微软.NET框架自动内存管理

    这个一个解释.NET框架中垃圾回收机制的一个很好的文章,希望能够帮助到初学者。这是Jeffrey Richter 2000年在MSDN杂志上的文章。

    [垃圾收集].(Garbage.Collection).(美)Richard.Jones.扫描版

    垃圾回收算法的经典之作。 本书围绕着动态内存自动回收的话题,介绍了垃圾收集机制,详细分析了各种算法和相关技术。  本书共12章。... 本书适合对动态内存管理感兴趣的读者阅读,可供专业的研究人员参考。 

    开发技术-硬件-嵌入式内存管理垃圾搜集器实时算.zip

    开发技术-硬件

    Java实时应用程序中的内存管理

    垃圾收集是一个比较复杂的过程。通常,Java运行时会遍历堆,检查不再被其他对象引用、从而可以...本文介绍了这个问题的解决方案是不要对实时应用程序使用Java,或者在Java中使用另一种内存管理方法来代替垃圾收集程序。

    详解如何减少python内存的消耗

    Python 打算删除大量涉及像C和C++语言那样的复杂内存管理。当对象离开范围,就会被自动垃圾收集器回收。然而,对于由 Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情。 在这篇博客中,我将会分享...

    跟我学习javascript的垃圾回收机制与内存管理

    原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。 JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,因为其开销比较大,所以...

    《垃圾收集》(Garbage Collection)扫描版[PDF]——part2

     本书适合对动态内存管理感兴趣的读者阅读,可供专业的研究人员参考。 目录: 第1章 简介 1.1 内存分配的历史 1.1.1 静态分配 1.1.2 栈分配 1.1.3 堆分配 1.2 状态、存活性和指针可到达性 1.3 显式堆分配 ...

    python内存管理机制原理详解

    引用计数也是一种垃圾收集机制, 而且也是一种最直观, 最简单的垃圾收集技术.当python某个对象的引用计数降为 0 时, 说明没有任何引用指向该对象, 该对象就成为要被回收的垃圾了.(如果出现循环引用的话, 引用计数机制...

    JVM自动内存管理机制

    Java自动内存管理机制包含两部分:内存分配和内存回收,要想理解内存分配和回收的机制,则需要了解下Java内存区域(Java运行时数据区),这篇随笔将按照下面的线索进行逐步解析:1.Java运行时数据区2.对象“已死”的...

    Java垃圾回收知识,垃圾回收资料

    重要性:垃圾回收是Java垃圾回收器的核心功能,对性能和内存管理至关重要。准确理解垃圾回收的原理和机制,以及能够优化和调优垃圾回收过程的能力,是一个Java开发者必备的基本技能。 面试中可能会问到的垃圾回收...

    javascript垃圾收集机制与内存泄漏详细解析

    javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中的使用的内存。而在C和C++之类的语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况,这是造成许多问题的一个根源。在编写...

Global site tag (gtag.js) - Google Analytics