Java引用的种类

---恢复内容开始---

  距离第一篇貌似有很久了,md拖延症越来越严重了,不过每天十点多下班回家到家就十一点多了,就只想睡觉了。不瞎bb了,直接上干活。主要想记录一下关于java引用。

 搞java的应该对引用这个词非常非常熟悉不过了,记得刚入门java的时候,这个词就一直伴随着我们。在java中又一个非常重要的东西那就是GC,对于gc来说,判断一个对象是否可回收的标志就在于该对象是不是还在被引用(关于gc下次专门记录一波),jvm为了更好的管理对象的引用,在lang.ref包下面有三个类:SoftReference,PhantomReference,WeakReference。分别代表软引用,虚引用和弱引用。

  那么总结下来,java是不是只有这三种引用呢?那答案就是no,是4种。还有天天用的强引用。可能很多人天天在不停的new对象,而不知道它叫强引用。下面分别逐一简单介绍这四种引用

  强引用:我们每天不停的new的对象,是最常见的引用方式,比如,Person p = new Person(); 那么p就是一个强引用变量。由于jvm不会回收强引用引用的对象,所以强引用是java造成内存泄漏的主要原因之一。

  软引用:是通过SoftReference实现,如果一个对象只具有软引用时,他有可能会被gc回收(注意用词,有可能),当系统的内存空间足够时,他也不会被回收,当空间不够时,将会被回收。

  弱引用:弱引用和软引用有点类似,主要差别就是弱引用的周期要更短一些,引用级别更低,用weakReference实现,只要发生gc的时候,不管内存够不够用,弱引用都会被gc掉。

  虚引用:软引用和弱引用都是能拿过来单独使用的,但是虚引用不可以,它主要的作用就是跟踪对象被垃圾回收的的状态,程序可以通过check和虚引用关联的引用queue是不是一件包含指定的虚引用,从而来了解所引用的对象是不是被回收。系统是没有办法通过虚引用来获得被引用的对象。个人觉得虚引用意义不是很大,了解有这么一个东西即可。

  

时间: 2024-08-22 22:25:45

Java引用的种类的相关文章

java锁的种类以及辨析(转载)

java锁的种类以及辨析(一):自旋锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及.本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑. 1.自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区.如下 01 public class SpinLock { 02  

关于Java引用,你必须知道这些

引用 Java 虚拟机接管了所有的内存分配与回收工作,极大地减少了程序员的工作量和错误率.GC 在回收内存时,通常采用被称为可达性分析的算法判断一个对象是否可以回收.而在可达性分析中,对象的引用有着决定性的作用.在下图中,GC 从 GC Roots 开始顺着引用链往下寻找对象,发现当前有引用的对象为object 1.object 2.object 3.object 4,而object 5.object 6.object 7虽然互相之间有引用但已经无法从外部引用到.因此,图中 object 1-4

Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference

http://www.cnblogs.com/skywang12345/p/3154474.html 1 Java引用介绍 Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:    强引用  >  软引用  >  弱引用  >  虚引用 ⑴强引用(StrongReference)    强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回

4种Java引用浅解

近期研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档.代码以及几篇文章.做个小结,如有错误,欢迎指正. 之所以想学习一下Java的几种引用类型,原因有两个: 理解Java Cache实现.学习Java引用与Java垃圾回收机制的关系 内存资源是有限的,须要合理的利用.Cache不是只HashMap那么简单,Java引用与Java垃圾回收机制也有很紧密的关系. 避免对Java引用的错误使用 某个同事把5000+交易数据放到一个HashMap

Java引用类型变量

Java引用类型变量 1.编译时类型:由声明该变量时使用的类型决定 2.执行时类型:由实际赋给该变量的对象决定    类型不一致的假设编译时类型和执行,可能会出现多态性 版权声明:本文博主原创文章.博客,未经同意不得转载.

Java引用变量的类型

Java引用变量的类型 1.编译时类型:由声明该变量时使用的类型决定 2.运行时类型:由实际赋给该变量的对象决定    如果编译时类型和运行时类型不一致,就可能出现多态性

java的程序种类

Java程序的种类有( ) A.类(Class) B.Applet C.Application D.Servlet 答案:BCD 下列说法正确的有( ) A.环境变量可在编译source code时指定 B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件 D.javac.exe能指定编译结果要置于哪个目录(directory) 正确答案: A C D 下列说法错误的有( ) A.数组是一种对象 B数组属于一种原生类 C.int numb

Java引用和C++引用的区别

今天做错了一道笔试题,发现以前的对于Java引用理解有误,特撰文记录 题目如下: public class Tester{ public static void main(String[] args){ Integer var1=new Integer(1); Integer var2=var1; doSomething(var2); System.out.print(var1.intValue()); System.out.print(var1==var2); } public static

浅解四种Java引用

最近研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档.代码以及几篇文章.做个小结,如有错误,欢迎指正. 之所以想学习一下Java的几种引用类型,原因有两个: 理解Java Cache实现.学习Java引用与Java垃圾回收机制的关系 内存资源是有限的,需要合理的利用.Cache不是仅仅HashMap那么简单,Java引用与Java垃圾回收机制也有非常紧密的关系. 避免对Java引用的错误使用 某个同事把5000+交易数据放到一个HashM