弱应用

弱应用:
在应用程序代码内实例化一个类或结构时,只要有代码引用它,就会形成强引用。例如,如果 有一个类 MyClass(),并创建了一个变量 myClassVariable 来引用该类的对象,那么只要 myClassVariable 在作用域内,就存在对 MyClass 对象的强引用,如下所示:
MyClass myClassVariable = new MyClass();
这意味着垃圾回收器不会清理 MyClass 对象使用的内存。一般而言这是好事,因为可能需要访 问MyClass 对象,但是如果 MyClass 对象很大,并且不经常访问呢?此时可以创建对象的弱引用。 弱引用允许创建和使用对象,但是垃圾回收器运行时,就会回收对象 并释放内存。
由于存在潜在的 bug 和性能问题,一般不会这么做,但是在特定的情况下使用弱引用 是很合理的。

class ww
    {
        public int   aa;
        public string  GetSquare()
        {

Console.WriteLine("good");
            return "morning";
        }
    
    }
    class Program
    {
       
        static void Main(string[] args)
        {

WeakReference wr = new WeakReference(new ww());
            ww w;
            w = wr.Target as ww;

if (w != null)
            {
                w.aa = 30; Console.WriteLine("Value field of math variable contains " + w.aa);
 Console.WriteLine("Square of 30 is " + w.GetSquare());
} else { Console.WriteLine("Reference is not available."); }  
GC.Collect();
if (wr.IsAlive)
{ w = wr.Target as ww; Console.WriteLine("!!"); } else { Console.WriteLine("Reference is not available."); }
            Console.WriteLine(  );
            Console.ReadKey();
           
           
            
           
        }

时间: 2024-11-10 17:08:50

弱应用的相关文章

Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】

弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样,永恒就可以从别的地方进攻摧毁战壕,从而消灭mx的部队. 战壕都有一个保护范围,同它的攻击

使用软引用和弱引用防止内存溢出

下面以使用软引用为例来详细说明.弱引用的使用方式与软引用是类似的. 假设我们的应用会用到大量的默认图片,比如应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到.如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低.所以我们考虑将图片缓存起来,需要的时候直接从内存中读取.但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常.这时,我们可以考虑使用软引用技术来避免这个问题发生. 首先定义一个HashMap,保存软引用

Android中的WeakReference 弱引用

WeakReference 弱引用 定义:弱引用,与强引用(我们常见的引用方式)相对:特点是:GC在回收时会忽略掉弱引用对象(忽略掉这种引用关系),即:就算弱引用指向了某个对象,但只要该对象没有被强引用指向,该对象也会被GC检查时回收掉. 强引用实例自然不会被GC回收! 如何引出弱引用?弱引用的实际用途是什么? 什么是内存泄漏?Java使用有向图机制,通过GC自动检查内存中的对象:如果GC发现一个或一组对象为不可达的状态,则将该对象从内存中回收.也就是说:一个对象不被任何引用所指向,则该对象会在

强、软、弱和虚引用的概念

本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用   在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用.图1为对象应用类层次. 图1 ⑴强引用(StrongReference)    强引用

如何处理服务器SSL收到了一个弱临时Diffie-Hellman 密钥?

处理服务器SSL收到了一个弱临时Diffie-Hellman 密钥 当我们用火狐浏览器打开某个HTTPS网站时可能会失败,并且出现如下错误提示:         安全连接失败连接某个URL网址时发生错误. 在服务器密钥交换握手信息中 SSL 收到了一个弱临时 Diffie-Hellman 密钥.         错误码: ssl_error_weak_server_ephemeral_dh_key) 如果换用谷歌Chrome打开这个相同的网页也会发生错误,并提示:            服务器的

java中四种引用类型(对象的强、软、弱和虚引用)

对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用. ⑴强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出O

java对象的强引用,软引用,弱引用和虚引用

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题.一般都是new出来的. Object o=new

Opencv研读笔记:haartraining程序之cvCreateCARTClassifier函数详解(CART树状弱分类器创建)~

cvCreateCARTClassifier函数在haartraining程序中用于创建CART树状弱分类器,但一般只采用单一节点的CART分类器,即桩分类器,一个多节点的CART分类器训练耗时很多.根据自己的测试,要等差不多10分钟(2000正样本.2000负样本)才能训练完一个3节点的弱分类器,当然,总体的树状弱分类器的数目可能也会减少1/2.之所以将此函数拿出来说说,主要是因为在网上找不到针对这个函数的详细说明,同时,CART的应用十分广泛,自己也趁这个机会好好学学,把自己的一点理解分享给

Lua程序设计 第17章 弱引用笔记

鉴于之前我对lua的评价,在此需要修改了一下我的言论:游戏开发语言工作中,最成熟的客户端开发组合:C/C++.Lua/C#.assembly汇编.C/C++系列用于完成游戏引擎框架,汇编用于优化,Lua负责游戏逻辑.在全局上满足了性能.可读性.变化性的需求.因为我选的是引擎方向,实际上只能吃透C/C++系列我才可能获得引擎 职位.另外推荐一本书<游戏引擎框架>-叶劲峰翻译的那本,并没有csdn某人读后感言"引擎水真深"的感觉.这本书写得好,可是那个废人却在叶劲峰的专访中说这

Java中的软(弱)引用

一.Java中的强.软.弱.虚引用 在JDK中我们可以看到有一个java.lang.ref的包,这个包中就是Java中实现强.软.弱.虚引用的包,如下: PhantomReference 虚引用:如果一个对象持有虚引用,就和没有持有引用一样,在任何时候都可能被垃圾回收器回收.虚引用主要用来跟踪对象被垃圾回收的活动,虚引用还有一个和弱.软引用不同的地方是虚引用必须和引用队列联合使用.当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象内存之前,把这个虚引用加入到与之关联的引用队列中