Java四种引用】的更多相关文章

Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式. 软引用: 非必须引用,内存溢出之前进行回收,可以通过以下代码实现Object obj = new Object();S…
Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类的引用 就是强引用. SoftReference(软引用) 用来描述一些有用但并非必需的对象. 在系统将要发生内存溢出异常前, 将会把这些对象列进回收范围之中, 进行二次回收.(如果这次回收了之后, 内存还是不足, 那么就会抛出内存溢出异常) 执行下面这段代码的时候, 设置一下虚拟机参数-Xms2m -Xmx…
小结: 1.不可访问内存是指一组没有任何可访问指针指向的由计算机程序进行动态分配的内存块. 2.垃圾收集器能决定是否一个对象还是可访问的:任何被确定不可访问的对象将会被释放. https://zh.wikipedia.org/wiki/不可访问内存 在计算机科学中,不可访问内存是指一组没有任何可访问指针指向的由计算机程序进行动态分配的内存块.类似的,一个不可访问对象是指没有可访问引用型指向的动态分配对象.通俗来说,不可访问内存是程序无法直接访问的动态内存,同时也无法通过指针指向一个可访问的起始对…
java 四种引用 Java4种引用的级别由高到低依次为: StrongReference > SoftReference > WeakReference > PhantomReference 1. StrongReference String tag = new String("T"); 此处的 tag 引用就称之为强引用.而强引用有以下特征: 1. 强引用可以直接访问目标对象. 2. 强引用所指向的对象在任何时候都不会被系统回收. 3. 强引用可能导致内存泄漏.…
JAVA四种引用方式: java.lang.ref: 强引用(直接变量赋值) 软引用(SoftReference): 只有在要发生OOM错误之前才会回收掉老的软引用对象,应用场景主要防止内存溢出.(缓存的使用) 弱引用(WeakReference): 只要gc 就会被回收 ,例如 WeakHashMap的应用,当Key值(弱引用的值)为null时,自动溢出Value.ThreadLocalMap.Entry 虚引用 (PhantomReference):虚引用在实现一个对象被回收之前必须做清理操…
JAVA四种引用 java对象的引用包括: 强引用 软引用 弱引用 虚引用 Java中提供这四种引用类型主要有两个目的: 第一是可以让程序员通过代码的方式决定某些对象的生命周期: 第二是有利于JVM进行垃圾回收. 实际用例 1.强引用 是指创建一个对象并把这个对象赋给一个引用变量. 比如 Object object =new Object(); String str ="哈哈哈"; 强引用有引用变量指向时永远不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象.…
Java中提供了一个Reference抽象类,此类定义所有引用对象共有的操作,与垃圾收集器密切配合实现的.主要是为了决定某些对象的生命周期,有利于JVM进行垃圾回收.而继承此类的有四种引用,分别是StrongReference(强引用),SoftReference(软引用),WeakReference(弱引用),PhantomReference(虚引用),强度按照上面的顺序依次减弱.下面来看下四种引用的对比. 类型 调用方式 回收条件 内存泄漏 StrongReference 直接调用 不回收…
转自:http://www.cnblogs.com/gudi/p/6403953.html 1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题.如果不使用时,要通过如下方式来弱化引用,如下: o=null; // 帮…
强引用-FinalReference 介绍: 强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式: String str = new String("str"); 这个str就是强引用. 可用场景: 地球人都知道,但是我讲不出来. 软引用-SoftReference 介绍: 软引用在程序内存不足时,会被回收,使用方式: // 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的, // 这里的软引用指的是指向new Stri…
在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚引用 5. 参考文章 1. 强引用 默认的Object object=new Object()的形式中,object即是对象new Object()的强引用,只有在object这个引用被释放后,对象才会被释放掉.这也是我们最常用的编码方式.如果一个引用是强引用,即使内存不足,GC也绝对不会回收它,而…
首先抛出一个问题:在闲暇时间收拾自己家里的时候,对某一件物件要不要丢弃的问题上,是否有过食之无味,弃之可惜的感觉? 同样的,JVM在回收Java对象的时候,是否对对象实例也有食之无味,弃之可惜的感受? 如果在某一段时间内,该对象没有被使用,JVM可能就要对资源进行回收了,但是等到下一秒要用的时候,发现已经回收,只能重新去new了,这样就会降低JVM的效率了.那么对这些暂时闲下来的对象,有没有好的处理办法呢? Java四种引用呼之欲出,JDK1.2之后,对于对象的引用增加了四个概念:强引用.软引用…
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时,被创建的对象就是强引用,如Object object = new Object() 这个Object()就是一个强引用.如果一个对象具有强引用,垃圾回收器就不会去回收有强引用的对象,如当jvm内存不足时,具备强引用的对象,虚拟机宁可会报内存空间不足的异常来终止程序,也不会靠垃圾回收器去回收该对象来…
Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 2.软引用(SoftReference) 如果一个对象只具有软引用,那就类似于可有可物的生活用品.如果内存空间足够,垃圾回收器就不会回收它,如果…
JVM的四种引用状态 在Java虚拟机5:Java垃圾回收(GC)机制详解一文中,有简单提到过JVM的四种引用状态,当时只是简单学习,知道有这么一个概念,对四种引用状态理解不深.这两天重看虚拟机这部分的时候,写了很多例子详细研究了一下JVM的几种引用,对于JVM的引用理解加深了不少,因此总结写一篇文章总结并分享下. 首先,还是先从JVM四种引用状态开始,这部分摘抄自周志明老师的<深入理解Java虚拟机:JVM高级特性与最佳实践>一书. 在JDK1.2之前,Java中的引用的定义很传统:如果re…
简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用)的作用.同时我们还将介绍ReferenceQueue和WeakHashMap的功能和使用示例. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. JAVA中的四种引用 四种引用中,软引用.若引用.虚引用都需要相关类来创建.创建的时候…
1.前言 HotSpot采取了可达性分析算法用来判断对象是否被能被GC,无论是引用计算法还是可达性分析算法都是判断对象是否存在引用来判断对象是否存活.如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用.为了丰富的描述对象与对象之间的关系,更为了实现系统缓存的原因,Java建立了四种引用级别. 2.四种引用级别 在JDK1.2后,Java对引用的概念进行了扩充,将引用分为强引用.软引用.弱引用和虚引用4种,这4种引用强度依次减弱. 最后,下面通过…
引用定义 实际上,Java中存在四种引用,它们由强到弱依次是:强引用.软引用.弱引用.虚引用.下面我们简单介绍下这四种引用: 强引用(Strong Reference):通常我们通过new来创建一个新对象时返回的引用就是一个强引用,若一个对象通过一系列强引用可到达,它就是强可达的(strongly reachable),那么它就不被回收 软引用(Soft Reference):软引用和弱引用的区别在于,若一个对象是弱引用可达,无论当前内存是否充足它都会被回收,而软引用可达的对象在内存不充足时才会…
JVM的四种引用状态 在Java虚拟机5:Java垃圾回收(GC)机制详解一文中,有简单提到过JVM的四种引用状态,当时只是简单学习,知道有这么一个概念,对四种引用状态理解不深.这两天重看虚拟机这部分的时候,写了很多例子详细研究了一下JVM的几种引用,对于JVM的引用理解加深了不少,因此总结写一篇文章总结并分享下. 首先,还是先从JVM四种引用状态开始,这部分摘抄自周志明老师的<深入理解Java虚拟机:JVM高级特性与最佳实践>一书. 在JDK1.2之前,Java中的引用的定义很传统:如果re…
1.强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Person();其中的 person 就是一个强引用,只有当它不再被使用后才会被垃圾回收器回收掉.当内存不足时,但是其依然在被使用中,那么垃圾回收器也不会回收其引用的对象:JVM 宁愿报“内存泄漏错误 (OutofMemoryError)”,终止程序也不会回收此引用所关联的对象. 2.软引用(Soft…
古龙有<七种武器>,java里有四种引用. 下文主要是对 <understanding-weak-references>这一博文的重点进行翻译 强引用,strong references StringBuffer buffer = new StringBuffer() 像上面这样的就是强引用,只要某个对象与gc root有强引用链相连,那么这个对象就不可能被gc回收掉.jvm宁可发生OOM,也不会回收这个对象. 强引用有时可能太强了 作者提出了两种场景 1. 假设我们有一个不可扩展…
  无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与"引用"有关.在Java语言中,将引用又分为强引用.软引用.弱引用.虚引用4种,这四种引用强度依次逐渐减弱.无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与"引用"有关.在JDK 1.2以前,Java中的引用的定义很传统:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地…
一个变量指向new对象,就是引用,在java中有四种引用,分别是强软弱虚,常见的Object o = new Object(),就是强引用,垃圾回收的时候,强引用不会被回收.   公用类: public class M { @Override protected void finalize() throws Throwable { System.out.println("finalize"); } } 强:只要有引用就不会回收代码: public class T01_NormalRef…
纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹 Java从1.2版本开始引入了4种引用,这四种引用的级别由高到低依次为:强引用>软引用>弱引用>虚引用. 一.强引用(StrongReference):         强引用是使用最普遍的引用,一般我们将对象初始化之后就是一个强引用.当一个对象具有强引用时,JVM不会对它进行垃圾回收.当内存不足时,宁愿抛出OutofMemoryError,让程序异常终止,也不会回收强引用. 二.软引用(Sof…
Java中的四种引用类型 一.背景 Java的内存回收不需要程序员负责,JVM会在必要时启动Java GC完成垃圾回收.Java以便我们控制对象的生存周期,提供给了我们四种引用方式,引用强度从强到弱分别为:强引用.软引用.弱引用.虚引用. 二.简介 1.强引用 StrongReference StrongReference是Java的默认引用形式,使用时不需要显示定义.任何通过强引用所使用的对象不管系统资源有多紧张,Java GC都不会主动回收具有强引用的对象. public class Str…
java四种对象引用类型 对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用. (1)强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间…
一次对ThreadLocal的学习引发的思考 ThreadLocal对Entry的引用是弱引用,于是联想到四种引用的生命周期. 强引用,不会进行垃圾回收 软引用,JVM内存不够,进行回收 弱引用,下次GC,直接进行回收 虚引用,不会对GC产生任何影响,结合ReferenceQueue使用,只为引用被回收时收到通知. 所以如果只有弱引用指向ThreadLocal,那么下次GC,ThreadLocal将被回收.阿里的代码规范上也要求ThreadLocal要被static修饰,就是为了防止后续还要使用…
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次new…
Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:2015-10-20 22:37:40      阅读:8762      评论:0      收藏:0      [点我收藏+] 标签: 介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执…
因为工作原因,自学会了vb后陆续接触了其它语言,在工作中经常需要与各家使用不同语言公司的开发人员做程序对接,初期特别需要一个各种语法的对照比,翻看了网络上已有高人做了整理,自己在他基础上也整理了一下,摘抄如下(最后附上原作,网上也可以找到): 类别 Vb6 & Vb.Net Delphi C# 语法 不区分大小写 不区分大小写 区分大小写 数据类型 数据     关键字    占用字节      类型符 整型          integer 长整型        long 单精度型     …
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次ne…