`

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

阅读更多
                           内存管理与垃圾收集(四)
                                        ----3中特殊的引用
(1)弱引用
实际开发中有时会遇到这样的情况,系统中会不断产生新的相同类型的对象,这些对象在使用后可以不保留而成为垃圾,但在内存允许的情况下最好尽量保留,可能还需要使用。这时可以使用弱引用----java.lang.ref.WeakReference就可以解决这个问题。
注:为了方便对弱引用对象的管理,java中提供了一个java.util.WeakHashMap类,其用法与普通的HashMap相同,只是其中指向键(key)对象的引用自动为弱引用。
    弱引用不影响对象是否成为垃圾,若一个对象在不计算弱引用的情况下满足垃圾收集的条件,其就是垃圾。
    弱应用适合用于解决称之为“流失监听者内存泄露”的问题

(2)软引用
对于弱引用指向的对象,在没有进行垃圾收集的情况下还可以进行调用,但一旦进行了垃圾收集就会被清除出内存。如果想“只要内存没有耗尽,都不要尝试释放这些对象”,可以使用Java中提供的阮引用----java.lang.ref.SoftReference,软引用指向的对象在内存没有耗尽的情况下不会被进行垃圾收集,具体的规则为:
a.在不计算软引用的情况下,无论对象是否为垃圾对象,垃圾收集器在抛出内存耗尽异常之前尝试释放软引用指向的对象,但内存耗尽之前不会对软引用指向对象进行垃圾收集。
b.在对软引用指向对象进行垃圾收集时,垃圾收集器以最近最少使用的顺序释放软引用指向的对象。

(3)幻影引用
    幻影应用(java.lang.ref.PhantomReference)的功能与前面两种不同。在不计算幻影引用的情况下如果对象成为垃圾,则在垃圾收集器运行时将此对象的引用加入一个指定的引用的队列。
    幻影引用的最常见使用情况:对引用队列中的对象指派比Java中的终结机制更灵活的pre-mortem清除操作。
注:Java的终结机制一般是指在对象被垃圾收集器清除出内存之前,自动调用对象的finalize方法进行一些清理的工作。
0
0
分享到:
评论

相关推荐

    理解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