Java提供了 java.lang.ref包,该包下的类均与垃圾回收机制相关

先介绍Java对象的集中引用类型

1.强引用

强引用是最常见的,创建对象就是强引用,如 String a = new String("1");

无论系统内存是否紧张,只要该对象还存在强引用就不会被垃圾回收机制回收

2.软引用

当系统内存足够时,不会被回收,当系统内存不足时,会将其回收

3.弱引用

当垃圾回收机制运行时,总会将其回收

4.虚引用

跟踪对象被垃圾回收的状态

通过检查与虚引用关联的引用队列中是否已经包含指定的虚引用,从而了解虚引用所引用的对象是否即将被回收

再介绍引用相关的类

  1. SoftReference<T>: 软引用类型,示例如下,

// 创建软引用类型

SoftReference<String> sr = new SoftReference<String>(new String("Hello"));

// 返回对象引用

String string = sr.get();

if(string == null){

// 因为软引用当系统内存紧张时会被回收,所以使用的时候需要判断是否为null

}

// 创建数组

SoftReference<String>[] srs = new SoftReference[100];

2.WeakReference<T>: 弱引用类型,示例如下

// 创建弱引用类型, 不能使用"Hello",这样系统会缓存这个字符串直接量,使用强引用来引用它

WeakReference<String> wr = new WeakReference<>( new String("Hello"));

// 调用弱引用

String str = wr.get();

// 因为软引用当运行垃圾回收时会被回收,所以使用的时候需要判断是否为null

if(str == null){}

// 强制垃圾回收

System.gc();

// 再次调用弱应用,发现已经为null

System.out.println(wr.get());

3.WeakHashMap<K,V>: 弱引用类型的Map,这个类是 java.util 包下的

当垃圾回收机制运行时,会清空所有key-value对,除非某些key还有强引用在引用它

4.PhantomReference<T>: 虚引用类型,类似于没有引用,要和引用队列联合使用

感觉不怎么用的到,就不举例子了,感兴趣自己查一下

5.ReferenceQueue<T>: 引用队列,用于保存被回收后对象的引用

Java 控制类的引用类型,合理使用内存的更多相关文章

  1. 关于Java Logger类的使用问题 - 内存不释放

    原文地址:http://www.ihuxu.com/p/236.html   说明:这是一个利用Java Logger类的示例,完成简单的日志记录功能.代码中有部分类库没有说明,但不影响阅读. 本人技 ...

  2. form 向java控制类 提交多表数据 、提交list数组数据

    案例:form中有三个表的数据,一个主表,两个子表 1.在主表model类添加 对应子表数据集 2.界面上主表定义 3.控制类接收,直接用主表对象接收即可

  3. java多线程(六)线程控制类

    1.   多线程控制类 为了保证多线程的三个特性,Java引入了很多线程控制机制,下面介绍其中常用的几种: l  ThreadLocal l  原子类 l  Lock类 l  Volatile关键字 ...

  4. java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方

    一道笔试题 22. 下面代码的运行结果为:() import java.io.*; import java.util.*; public class foo{ public static void m ...

  5. Java.控制层.响应工具类.

    Java.控制层.响应工具类. package cn.com.spdbccc.cds.index.web.base; public class ApiResponse { private int co ...

  6. Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC

    [转载] :http://my.oschina.net/rouchongzi/blog/171046 Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指 ...

  7. java中四种引用类型

    java中四种引用类型  今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...

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

    对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...

  9. 基础篇:JAVA引用类型和ThreadLocal

    前言 平时并发编程,除了维护修改共享变量的场景,有时我们也需要为每一个线程设置一个私有的变量,进行线程隔离,java提供的ThreadLocal可以帮助我们实现,而讲到ThreadLocal则不得不讲 ...

随机推荐

  1. Jenkins常见REST API(便于将Jenkins集成到其他系统)

    1.运行job a.无参任务 curl -XPOST http://IP:8080/jenkins/job/plugin%20demo/build --user admin:admin b.含参任务 ...

  2. Java常见开发规范

    1 背景概述 作为程序员大军中的一员,笔者工作于沈阳数通畅联软件技术有限公司.在任职工作的第一天就听领导强调开发规范的重要性,但是笔者心里还想为什么开发规范是最重要的,难道是不应该是实现功能就万事大吉 ...

  3. 自学自用 = B站(操作系统_清华大学(向勇、陈渝)) 未完待续。。

    视频地址 https://www.bilibili.com/video/av6538245 介绍 本篇博客,旨在记录视频学习的要点,所以格式随意, 方便本人日后自考和回忆,有兴趣的朋友可以评论讨论. ...

  4. Javascript高级编程学习笔记(59)—— 事件(3)事件对象

    事件对象 在触发DOM‘事件时,会产生一个事件对象 event 该对象包含着所有与事件有关的信息 所有浏览器都支持 event 对象但是支持的方式有所不同 DOM事件对象 兼容DOM的浏览器会将eve ...

  5. 微信小程序合法域名配置-不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书

    微信小程序合法域名配置-不校验合法域名.web-view(业务域名).TLS 版本以及 HTTPS 证书 很多教程说按照以上方式调用即可.但是当我们在程序中实际调用以上程序时,就会报错, http:/ ...

  6. python数字图像处理---噪声的应用

    数字图像的随机噪声在图像处理中有着重要的位置,今天用到了,就回顾一下.做个总结. 随机噪声很多种,最常用的一般有两种,高斯噪声和椒盐噪声,下面我们就针对这两种噪声做个科普. 高斯噪声:高斯噪声是指它的 ...

  7. Android Studio 更新同步Gradle错误解决方法

    1.在https://services.gradle.org/distributions/下载对应的gradle的zip包,对应方法见gradle-wrapper.properties文件中的: di ...

  8. 怎么让Word形状里的文字上下左右居中

    怎么让Word形状里的文字上下左右居中? 第一:左右居中,用段落居中方法: 第二:上下居中,选定图形,单击鼠标右键并选择“设置形状格式”,在选项卡的“文本框”中,选择中部对齐 效果图:

  9. Linux编程 11(shell全局环境变量与局变环境变量)

    一.概述 在linux中,很多程序和脚本都通过环境变量来获取系统信息,存储临时数据,配置信息.环境变量是指用来存储有关shell会话和工作环境信息,允许你在内存中存储数据,以便程序或shell中运行的 ...

  10. Hibernate实体类注解中如何忽略某些字段的映射

    使用注解 @Transient在该字段上 例如: @Transient private int  name: 这样在映射数据表和对象关系时候就不会报在表中不存在该字段的问题: