您现在的位置是:首页 > 正文

Java 的引用

2024-02-01 06:43:17阅读 2

Java 的引用

在 Java 中引用可以分为强引用、软引用、弱引用、虚引用

强引用

gc 中只会回收那些可达性分析不可达的对象,

软引用

只有在内存不足的时候才会回收这个对象

弱引用

只要发生 GC 就会被回收

虚引用

这个是一个不是真的在引用使用 get() 方法返回的永远都是 null,这个引用一般都是要和 ReferenceQueue 联合使用,普遍是用来监听对象被回收的情况被执行 finalization 的阶段

参考案例

public class RefDemo {
    public static void main(String[] args) throws Exception {
        // 软引用
        SoftReference<Object> softReferenceObj = new SoftReference<>(new Object());
        // 弱引用
        WeakReference<Object> weakReferenceObj = new WeakReference<>(new Object());
        ReferenceQueue<Object> weakReferenceQueue = new ReferenceQueue<>();
        WeakReference<Object> weakReferenceObjWithQueue = new WeakReference<>(new Object(), weakReferenceQueue);
        // 虚引用
        ReferenceQueue<Object> phantomReferenceQueue = new ReferenceQueue<>();
        PhantomReference<Object> phantomReference = new PhantomReference<>(new Object(), phantomReferenceQueue);
        System.out.println(softReferenceObj.get());
        ArrayList<byte[]> bytes = new ArrayList<>();
        while (true) {
            System.out.println("Soft 对象:" + softReferenceObj.get());
            System.out.println("Weak 对象:" + weakReferenceObj.get());
            System.out.println("WeakQueue 对象:" + weakReferenceObjWithQueue.get());
            System.out.println("WeakQueue Queue 对象:" + weakReferenceQueue.poll());
            System.out.println("Phantom 对象:" + phantomReference.get());
            System.out.println("Phantom 对象:" + phantomReferenceQueue.poll());
            TimeUnit.SECONDS.sleep(1);
            byte[] bt = new byte[1024 * 100];
            bytes.add(bt);
            if (1 == 3) break;
        }
        System.out.println(bytes);
    }
}

网站文章

  • 医学计算机应用研究的意义,肝CT图像分析的临床与计算机应用研究

    摘要:目的:研究肝硬化CT肝实质形态分级与CT肝脾容积测量相结合对肝硬化CT定量诊断和肝切除术前肝储备功能评估的临床应用价值,并探索计算机自动测量的方法及其可行性. 方法:(1) 用CT机分别测量50...

    2024-02-01 06:43:10
  • springBoot中实现分页查询

    SpringBoot中实现条件分页查询

    2024-02-01 06:43:03
  • 阿里云ECS服务器挂载磁盘 热门推荐

    阿里云ECS服务器挂载磁盘 热门推荐

    买了阿里云的ECS云服务器,本机赠送20GB的磁盘,感觉不够用,又买了一块500GB的磁盘,本文就是记录怎么把这500GB的磁盘挂载上。 检查现在磁盘情况 我们可以看到买的那个500GB的磁盘没有出现,说明没有挂载上。 查看硬盘个数及分区 我们可以看到那块500GB的磁盘:/dev/xvdb 对这块500GB的硬盘进行分区 再次查看磁盘个数及分区 可以看到新的分区:/dev/xvd

    2024-02-01 06:42:34
  • 使用过滤器(Filter)解决乱码问题

    使用过滤器解决中文乱码问题一:常规方法 (1)Post提交方式1.第一种用法:使用xml配置文件//配置文件,在web.xml中写入如下代码 MyFilterConfig com.zzz.MyFilterConfig encoding UTF-8 //在Servlet中写入如下代码request.s

    2024-02-01 06:42:30
  • MIT CS6.006 最短路径专题

    MIT CS6.006 最短路径专题

    单源最短路径·找出一个带权有向图从起点到终点权重和最小的路径。几个变体:1.单目的地最短路径问题2.单结点对最短路径问题3.所有节点对最短路径问题一个隐藏的重要性质:两个节点之间的一条最短路径也包含着...

    2024-02-01 06:42:22
  • 在ubuntu环境下安装cpu版本的tensorflow

    环境要求:ubuntu14.04 64位、 因为要使用分布式深度学习平台,这里选择了tensorflow,我的电脑是ATI的显卡,所以这里记录的是安装cpu版本的tensorflow,其具体安装过程如下: (1)安装anaconda(这是一个很好的python编程的IDE,具体安装过程请参见其他资料); (2)安装conda环境。好处是conda环境能够把不同的python工程所需的依赖库隔...

    2024-02-01 06:41:51
  • Java接受blob类型图片_原生JS上传图片接收服务器端图片并且显示图片(主要描述blob类型)...

    Java接受blob类型图片_原生JS上传图片接收服务器端图片并且显示图片(主要描述blob类型)...

    1.了解后端处理图像的方式一:图片以独立文件的形式存储在服务器的指定文件夹中,再将路径存入数据库字段中二:将图片转换成blob,直接存储到数据库的 Image 类型字段中(这种方式负担很大不建议使用)...

    2024-02-01 06:41:44
  • startService, bindService区别和总结

    service有2种启动方式,startService和bindService。知识点包括以下几个方面:一. 生命周期 (一) startService生命周期 1. onCreate() –&gt;...

    2024-02-01 06:41:38
  • SpringBoot使用Redis缓存 + @Cacheable, @CachePut, @CacheEvict注解使用

    SpringBoot使用Redis缓存 + @Cacheable, @CachePut, @CacheEvict注解使用

    目录 SpringBoot使用Redis缓存 Spring缓存注解@Cache使用 @Cacheable、@CachePut、@CacheEvict 注释介绍 SpringBoot使用Redis缓存 - gdpuzxs - 博客园 https://www.cnblogs.com/gdpuzxs/p/7222309.html SpringBoot使用Redis...

    2024-02-01 06:41:08
  • AES-128-CBC加解密方法:nodejs加密QT解密(附C语言版加解密全过程)

    服务器端使用的是nodejs编写的代码,对明文进行加密,客户端使用的是QT4.5.3编写代码,调用openssl crypto库函数,对密文进行解密。注意:加解密要对等,即加解密的秘钥相同,向量也要相同,由于是两种不同的语言写的代码,因此两边都要做好一致性检查,比如秘钥的处理,密文的编码方式等等。这里两边都对秘钥进行了MD5加密,并设置向量和秘钥一样(可自由设置秘钥和向量,我们的代码中处理...

    2024-02-01 06:41:02