WeakHashMap相关

本文深入介绍了Java中的引用类型,包括强引用、软引用、弱引用和幻像引用,并通过示例代码展示了弱引用的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将深入地介绍关于引用对象(Reference Objects)的知识。基本上说,引用对象提供了一种对象间接引用所需内存的方式,这些引用对象保存在一个引用对象中(类ReferenceQuene),它监视这些引用对象使得其可以访问。基于这种类型的引用对象,垃圾回收器能够释放内存,而一般的对象引用则可能无法释放。
在Java中,有四种类型的对象引用。常用的是直接引用,如:
 Object obj = new Object()
您可以将直接引用当作一种无需额外的代码去创建或访问对象的一种强引用。接下来的三种类型的引用是java.lang.ref包中的Reference类的子类。软引用(Soft reference)由SoftReference类提供,弱引用(weak reference)由WeakReference类提供,幻像引用(PhantomReference)由PhantomReference提供。
软引用的工作方式很像数据缓存。当系统内存太低的时候,GC可以任意地释放软引用所引用的对象。换句话说,如果一个对象没有强引用,那么这个对象就是一个候选释放对象。在抛出OutOfMemoryException异常之前,GC将要求释放任何软引用。
 
弱引用比软引用弱。如果对象的引用只有弱引用,则GC将可能在任何时候回收内存,而不需要等到内存不足的时候。典型的动作是GC在下一个回收周期中对象的内存被回收。
幻像引用与清理任务有关。他们提供了一种在GC执行终止程序和释放对象之前即时通知机制。将其理解为在一个对象之前进行的清理任务。

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/bio_go/archive/2009/05/11/4165106.aspx

 

 

 

import java.util.Map;
import java.util.WeakHashMap;

public class WeakTest
{
    private static Map<String, String> map;

    public static void main(String args[])
    {
        map = new WeakHashMap<String, String>();
        String str = new String("Peter");
        map.put(str, "Peter");
        Thread t = new Thread(new Runnable()
        {
            public void run()
            {
                while(map.containsKey("Peter"))
                {
                    try
                    {
                        Thread.sleep(500);
                    }
                    catch(InterruptedException ignored) {
                        // Do nothing
                    }
                    System.out.println("The map contains Peter.");
                    System.gc();
                }
                System.out.println("Peter has gone.");
            }
        });
        t.start();
        try
        {
            Thread.sleep(2000);
            // After two seconds, we set str null
            str = null;
            System.out.println("Main thread is going to join our thread");
            t.join();
        }
        catch(InterruptedException ignored)
        {
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值