内存管理与垃圾收集(四)
----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方法进行一些清理的工作。
分享到:
相关推荐
讲解java虚拟机 包括内存模型,内存管理,垃圾回收算法,垃圾回收调优,arthas、jmap内存问题排查
文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...
很久之前就一直在学习JVM,但是一直也没有好好的总结,最近终于有了空闲,将之前学习的内容整理成了一个PPT。 也希望大神们可以批评指正。 ppt中主要包含下面几部分: Java内存模型 ... 垃圾收集器
文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...
本文介绍了垃圾收集的好处是无可争辩的--可靠性提高、使内存管理与类接口设计分离,并使开发者减少了跟踪内存管理错误的时间。不过,垃圾收集不是没有代价的--其中包括对性能的影响、暂停、配置复杂性和不确定的结束...
书围绕着动态内存自动回收的话题,介绍了垃圾收集机制,详细分析了各种算法和相关技术。 本书共12章。第1章首先介绍计算机存储器管理的演化... 本书适合对动态内存管理感兴趣的读者阅读,可供专业的研究人员参考。
java内存结构,垃圾收集,并发收集,虚拟机参数
JVM内存调优,java内存管理总结。包含新生代、老年代等详解。还有垃圾回收收集器详解。
本章介绍内存管理和内存访问的各个方面。...● 垃圾收集的工作原理 ● 如何使用析构函数和System.IDisposable接口来确保正确释放未托管的资源 ● C#中使用指针的语法 ● 如何使用指针实现基于堆栈的高性能数组
这个一个解释.NET框架中垃圾回收机制的一个很好的文章,希望能够帮助到初学者。这是Jeffrey Richter 2000年在MSDN杂志上的文章。
垃圾回收算法的经典之作。 本书围绕着动态内存自动回收的话题,介绍了垃圾收集机制,详细分析了各种算法和相关技术。 本书共12章。... 本书适合对动态内存管理感兴趣的读者阅读,可供专业的研究人员参考。
开发技术-硬件
垃圾收集是一个比较复杂的过程。通常,Java运行时会遍历堆,检查不再被其他对象引用、从而可以...本文介绍了这个问题的解决方案是不要对实时应用程序使用Java,或者在Java中使用另一种内存管理方法来代替垃圾收集程序。
Python 打算删除大量涉及像C和C++语言那样的复杂内存管理。当对象离开范围,就会被自动垃圾收集器回收。然而,对于由 Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情。 在这篇博客中,我将会分享...
原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。 JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,因为其开销比较大,所以...
本书适合对动态内存管理感兴趣的读者阅读,可供专业的研究人员参考。 目录: 第1章 简介 1.1 内存分配的历史 1.1.1 静态分配 1.1.2 栈分配 1.1.3 堆分配 1.2 状态、存活性和指针可到达性 1.3 显式堆分配 ...
引用计数也是一种垃圾收集机制, 而且也是一种最直观, 最简单的垃圾收集技术.当python某个对象的引用计数降为 0 时, 说明没有任何引用指向该对象, 该对象就成为要被回收的垃圾了.(如果出现循环引用的话, 引用计数机制...
Java自动内存管理机制包含两部分:内存分配和内存回收,要想理解内存分配和回收的机制,则需要了解下Java内存区域(Java运行时数据区),这篇随笔将按照下面的线索进行逐步解析:1.Java运行时数据区2.对象“已死”的...
重要性:垃圾回收是Java垃圾回收器的核心功能,对性能和内存管理至关重要。准确理解垃圾回收的原理和机制,以及能够优化和调优垃圾回收过程的能力,是一个Java开发者必备的基本技能。 面试中可能会问到的垃圾回收...
javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中的使用的内存。而在C和C++之类的语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况,这是造成许多问题的一个根源。在编写...