Java 控制类的引用类型,合理使用内存
Java提供了 java.lang.ref包,该包下的类均与垃圾回收机制相关
先介绍Java对象的集中引用类型
1.强引用
强引用是最常见的,创建对象就是强引用,如 String a = new String("1");
无论系统内存是否紧张,只要该对象还存在强引用就不会被垃圾回收机制回收
2.软引用
当系统内存足够时,不会被回收,当系统内存不足时,会将其回收
3.弱引用
当垃圾回收机制运行时,总会将其回收
4.虚引用
跟踪对象被垃圾回收的状态
通过检查与虚引用关联的引用队列中是否已经包含指定的虚引用,从而了解虚引用所引用的对象是否即将被回收
再介绍引用相关的类
- 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 控制类的引用类型,合理使用内存的更多相关文章
- 关于Java Logger类的使用问题 - 内存不释放
原文地址:http://www.ihuxu.com/p/236.html 说明:这是一个利用Java Logger类的示例,完成简单的日志记录功能.代码中有部分类库没有说明,但不影响阅读. 本人技 ...
- form 向java控制类 提交多表数据 、提交list数组数据
案例:form中有三个表的数据,一个主表,两个子表 1.在主表model类添加 对应子表数据集 2.界面上主表定义 3.控制类接收,直接用主表对象接收即可
- java多线程(六)线程控制类
1. 多线程控制类 为了保证多线程的三个特性,Java引入了很多线程控制机制,下面介绍其中常用的几种: l ThreadLocal l 原子类 l Lock类 l Volatile关键字 ...
- java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方
一道笔试题 22. 下面代码的运行结果为:() import java.io.*; import java.util.*; public class foo{ public static void m ...
- Java.控制层.响应工具类.
Java.控制层.响应工具类. package cn.com.spdbccc.cds.index.web.base; public class ApiResponse { private int co ...
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
[转载] :http://my.oschina.net/rouchongzi/blog/171046 Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指 ...
- java中四种引用类型
java中四种引用类型 今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
- 基础篇:JAVA引用类型和ThreadLocal
前言 平时并发编程,除了维护修改共享变量的场景,有时我们也需要为每一个线程设置一个私有的变量,进行线程隔离,java提供的ThreadLocal可以帮助我们实现,而讲到ThreadLocal则不得不讲 ...
随机推荐
- 卷积神经网络中的channel 和filter
在深度学习的算法学习中,都会提到 channels 这个概念.在一般的深度学习框架的 conv2d 中,如 tensorflow .mxnet,channels 都是必填的一个参数. channels ...
- VSCode插件开发全攻略(十)打包、发布、升级
更多文章请戳VSCode插件开发全攻略系列目录导航. 发布方式 插件开发完了,如何发布出去分享给他人呢?主要有3种方法: 方法一:直接把文件夹发给别人,让别人找到vscode的插件存放目录并放进去,然 ...
- My year of 2017
有一个姓罗的胖子,他说他有一个要坚持20年计划,第一年我真的不觉得什么,好比每天晚上都要刷牙每天早上都要吃早饭一样简单.实际几年走下来之后,发现能坚持下来真不是一件容易的事情,生活中总会有各种各样的事 ...
- My Feedback for Windows 10 IoT Core on Feedback Hub App (4/1/2017-1/23/2018)
- [转]kaldi基于GMM做分类问题
转自:http://blog.csdn.net/zjm750617105/article/details/55211992 对于每个类别的GMM有几种思路: 第一是将所有训练数据按类别分开,每类的数据 ...
- Python教程:从零到大师
首先, 什么是Python? 用python作者Guido van Rossum自己的话来说,Python是这样的一门语言: "它是一门高级编程语言, 它的核心设计理念是让所有代码变得 ...
- python(leetcode)-283移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作, ...
- document.getElementsByClassName返回的是一个数组
转载自:https://www.cnblogs.com/shark1100913/p/6713327.html document.getElementsByClassName("a&qu ...
- mamp使用
MAMP Pro软件是一款很好的在MAC下面运行的网站集成环境软件,功能强大,配置简单,十分便于本地调试,其由Apache+MySQL+PHP+动态DNS配置构成,PHP的版本可以动态切换到最新版.无 ...
- 全网最详细的一款满足多台电脑共用一个鼠标和键盘的工具Synergy(图文详解)
不多说,直接上干货! 前言 如今无论你是在公司做大数据开发还是实验室里搞科研,这个软件确实好用,作为正在通往大数据架构师路上的我们没有几台电脑怎么行?台式机.笔记本,都放在写字台上,笔记本内置键盘鼠标 ...