Java 中的四种引用
垃圾收集器与内存分配策略参考目录:
1.判断Java 对象实例是否死亡
2. Java 中的四种引用
3.垃圾收集算法
4. Java9中的GC 调优
5.内存分配与回收策略
在进行垃圾回收之前,虚拟机判定对象是否需要回收都与”引用”相关。在jdk1.2 之前,Java 关于引用的定义很传统:如果reference 类型的数据存储的数值代表另一块内存的起始地址,就称这块内存代表着一个 引用。这种定义看似很纯粹,但是却是很狭隘的,因为一个对象被定义出来只有被引用或者没有被引用两种状态。我们希望能这样描述一类对象:当内存空间还足够时,则保留在内存中;如果内存在进行垃圾回收之后仍然很紧张,则抛弃这些对象。很多系统的缓存功能都符合这样的应用场景。
于是在jdk1.2 之后,Java 对引用的概念进行了扩充,将引用分为:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)这四种,这四种引用关系逐渐减弱。
- 强引用是指在代码中普遍存在的,类似 “Object obj = new Object();” 这类的引用,只要强引用还存在,垃圾回收器永远不会回收掉引用的对象。
- 软引用是用来描述一些还有用但并非是必要的对象。对于软引用着的对象,在系统将要发生内存溢出异常之前,将会把这类对象列进回收范围进行第二次的回收。如果这次回收仍然没有足够的内存,就会抛出内存溢出异常。在jdk1.2 中提供了SoftReference 类来实现软引用。
- 弱引用也是用来描述非必须对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次的垃圾回收之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在jdk1.2 中提供了WeakReference 类来实现弱引用。
- 虚引用也被称为幽灵引用或幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间造成影响,也无法通过虚引用来取得一个对象的实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集时收到一个系统通知。在jdk1.2 中提供了PhantomReference 类来实现虚引用。
现在只是通过书籍了解到相关的四种引用关系并没有在实际的代码中遇到有关软引用、弱引用与虚引用的实例,如果以后工作了能接触到有关的实际案例再来谈谈一些看法吧。
参考书籍:
《深入理解Java 虚拟机》周志明 著
Java 中的四种引用相关推荐
- Java 中的四种引用及垃圾回收策略
Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会 ...
- Java中的四种引用方式的区别
强引用.软引用.弱引用.虚引用的概念 ps:我更新了.....我真的更新了.....因为博客园不支持MarkDown,而且取了一个很low的用户名,所以不用了..... 强引用(StrongRefer ...
- Java中的四种引用
相关概念 java有4种引用,可分为强引用(NormalReference).软引用(SoftReference).弱引用(WeakReference).虚引用(phantomReference) g ...
- java中的四种代码块
原文链接: java中的四种代码块_Munt的博客-CSDN博客_java中代码块 在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造 ...
- java 代码块_详解java中的四种代码块
在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. ...
- Java 中的四种引用类型
一.背景 Java的内存回收不需要程序员负责,JVM会在必要时启动Java GC完成垃圾回收.Java以便我们控制对象的生存周期,提供给了我们四种引用方式,引用强度从强到弱分别为:强引用.软引用.弱引 ...
- java中的五种引用数据类型(对象类型)
注意,不是JVM中的四种引用类型:强.软.弱.虚引用. 详见我的另一篇文章<JVM中的四种引用类型> Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注 引用类型:底层结构和 ...
- java中有几种内部类,Java中的四种内部类
四种内部类 在Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的 内部类一般来说包括这四种:静态内部类.匿名内部类.成员内部类和局部内部类,下面我们一一介绍 ...
- Java对象的四种引用方式
本文会按照以下思路进行: (1)Java的四种对象引用的基本概念 (2)四种对象引用的差异对比 (3)对象可及性的判断以及与垃圾回收机制的关系 (4)引用队列ReferenceQueue的介绍 (5) ...
最新文章
- Jquery-core.holdReady()
- Linux中log的目录,/var/log目录中Linux日志文件的功能详解
- SPSS输出的结果都要写到文章中吗
- 如何设置Linux操作系统shell命令的默认语言
- 图解集成学习中的梯度提升思想
- IoC(控制反转)的主要组件和注入的两种方式
- 更改oracle字符集为utf_oracle字符集AL16UTF16改为ZHS16GBK
- 我的第五个程序 java的JDBC连接mysql数据库 实现输入查询
- 蓝桥杯 BASIC-13 基础练习 数列排序
- Spark性能优化:Shuffle调优篇
- matlab能不能求不定积分,matlab求不定积分定积分
- TF卡开启被写保护怎么办
- 手机上计算机开n次方,手机计算器还能这样用,99%的人都不知道
- 如何重命名c盘中users文件夹下的文件名
- Java MD5签名需要使用UTF-8格式,利用MD5加密后转成大写
- [MySQL系列] SELECT STRAIGHT_JOIN优化join查询技巧
- 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
- Mac电脑如何通过终端隐藏应用程序?
- arcgis中mxd批量导图(tif,png,jpg,pdf)
- 编写函数long fun(int high,int n),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若high=100,n=10,则函数
热门文章
- 【❤️算法系列之二叉树的实现(包含前序、中序、后序遍历以及节点的查找和删除)❤️】
- 【static关键字的作用是什么?它用在什么场景?static关键字深度解析来袭】
- 快速判断list是否为空
- 【学习笔记】抽象队列同步器AQS应用之BlockingQueue详解
- 操作系统 第二章【进程管理】【MOOC答案】
- Kotlin实战指南十六:Synchronized、Volatile
- Android RxJava 3.x 使用总结
- WatchOS系统开发大全(6)-WKInterfaceLabel
- linux清空文件内容的几种方式与区别
- Java 面试题问与答:编译时与运行时