精华内容
下载资源
问答
  • java中有四种引用类型,分别是强引用、软引用、弱引用和虚引用。引用类型和原始类型具有不同的特征和用法。Java 提供两种不同的类型:引用类型和原始类型(或内置类型)引用类型和原始类型的行为完全不同,并且它们...

    java中的引用类型是指除了基本数据类型之外的所有类型。java中有四种引用类型,分别是强引用、软引用、弱引用和虚引用。引用类型和原始类型具有不同的特征和用法。

    ef8fe710386ef5a9b1faa54251aa8df7.png

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)

    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型

    用作某个类的实例数据时所指定的缺省值。

    对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性。

    这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。

    Java的4种引用类型:

    他们分别是强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被

    GC回收的可能性从大到小排列。

    强引用(StrongReference)

    只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如

    果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了

    软引用(SoftReference)

    软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对

    象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片

    缓存等。

    在 JDK1.2 之后,用java.lang.ref.SoftReference类来表示软引用。

    弱引用(WeakReference)

    弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。

    在 JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用。

    PhantomReference(虚引用)

    虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。

    展开全文
  • 什么叫引用referenceObject o = new Object();这个 o,我们可以称之为对象引用,而 new Object()我们可以称之为在内存 产生了一个...强引用(strong reference)强引用(strongreference)就是指在程序代码之普遍存在...

    什么叫引用reference

    Object o = new Object();

    这个 o,我们可以称之为对象引用,而 new Object()我们可以称之为在内存 中产生了一个对象实例。

    当写下 o=null 时,只是表示 o 不再指向堆中 object 的对象实例,不代表这个对象实例不存在了。

    强引用(strong reference)

    强引用(strongreference)就是指在程序代码之中普遍存在的,类似“Object obj=new Object()” 这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象实例。

    软引用(soft reference)

    一些有用但是并非必需,用软引用关联的对象,系统将要发生OOM之前,这些对象就会被回收。参见代码:

    弱引用(weak reference)

    弱引用(weakreference)是一些有用(程度比软引用更低)但是并非必需,用弱引用关联的对象,只能生存到下一次垃圾回收之前,GC发生时,不管内存够不够,都会被回收。见代码:

    虚引用(phantom reference)

    虚引用(phantomreference)幽灵引用,最弱,被垃圾回收的时候收到一个通知

    一个对象 实例是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用 来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象 实例被收集器回收时收到一个系统通知。

    展开全文
  • 其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧:1、Java中有哪几种引用?...

    Java类型一般有两种,即基本数据类型与引用数据类型。其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧:

    1、Java中有哪几种引用?它们的含义和区别是什么?

    从JDK1.2开始,Java中的引用类型分为四种,分别是:

    ①强引用(StrongReference)

    ②软引用(SoftRefernce)

    ③弱引用(WeakReference)

    ④虚引用(PhantomReference)

    强引用-StrongReference

    这种引用是平时开发中最常用的,例如Stringstrong=newString("StrongReference"),当一个实例对象具有强引用时,垃圾回收器不会回收该对象,当内存不足时,宁愿抛出OutOfMemeryError异常也不会通过回收强引用的对象,因为JVM认为强引用的对象是用户正在使用的对象,它无法分辨出到底该回收哪个,强行回收有可能导致系统严重错误。

    软引用-SoftReference

    如果一个对象只有软引用,那么只有当内存不足时,JVM才会去回收该对象,其他情况不会回收。软引用可以结合ReferenceQueue来使用,当由于系统内存不足,导致软引用的对象被回收了,JVM会把这个软引用加入到与之相关联的ReferenceQueue中。

    ReferenceQueuereferenceQueue=newReferenceQueue();

    SoftReferencesoftReference=newSoftReference<>(newBook(),referenceQueue);

    Bookbook=softReference.get();

    Referencereference=referenceQueue.poll();

    当系统内存不足时,触发gc,这个Book就会被回收,reference将不为null。

    弱引用-WeakReference

    只有弱引用的对象,当JVM触发gc时,就会回收该对象。与软引用不同的是,不管是否内存不足,弱引用都会被回收。弱引用可以结合ReferenceQueue来使用,当由于系统触发gc,导致软引用的对象被回收了,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中,不过由于垃圾收集器线程的优先级很低,所以弱引用不一定会被很快回收。下面通过一个主动触发gc的例子来验证此结论。

    ReferenceQueuereferenceQueue=newReferenceQueue();

    WeakReferenceweakReference=newWeakReference(newBook(),referenceQueue);

    Bookbook=softReference.get();

    System.gc();

    //Runtime.getRuntime().gc();

    Referencereference=referenceQueue.poll();

    当然这不是每次都能复现,因为我们调用System.gc()只是告诉JVM该回收垃圾了,但是它什么时候做还是不一定的,但就我测试来看,只要多写几次System.gc(),复现的概率还是很高的。

    虚引用-PhantomReference

    如果一个对象只有虚引用在引用它,垃圾回收器是可以在任意时候对其进行回收的,虚引用主要用来跟踪对象被垃圾回收器回收的活动,当被回收时,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中。与软引用和弱引用不同的是,虚引用必须有一个与之关联的ReferenceQueue,通过phantomReference.get()得到的值为null,试想一下,如果没有ReferenceQueue与之关联还有什么存在的价值呢?

    PhantomReferencephantomReference=newPhantomReference<>(newBook(),referenceQueue);

    Bookbook=phantomReference.get();//此值为null

    Referencereference=referenceQueue.poll();

    想了解更多Java知识,关注动力节点IT培训官网的Java资讯吧。

    展开全文
  • Java 中引用类型有哪些

    千次阅读 2019-10-19 22:45:47
    Java 中引用类型有哪些 Java中对象的引用分为四种级别,这四种级别由高到低依次为:强引用、软引用、弱引用和虚 引用。 强引用( StrongReference) 如果一个对象被被人拥有强引用,那么垃圾回收器绝会回收它。当...

    Java 中引用类型都有哪些

    Java中对象的引用分为四种级别,这四种级别由高到低依次为:强引用、软引用、弱引用和虚 引用。

    强引用( StrongReference)

    如果一个对象被被人拥有强引用,那么垃圾回收器绝会回收它。当内存空间不足, Java 虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止,也不会靠随意
    回收具有强引用的对象来解决内存不足问题。

    Java的对象是位于 heap 中的, heap 中对象有强可及对象、软可及对象、弱可及对象、虚可及对象和不可到
    达对象。应用的强弱顺序是强、软、弱、和虚。对于对象是属于哪种可及的对象,由他的最强的引用决定。如下代
    码:

    
     String abc=new String("abc"); //1
     SoftReference<String> softRef=new SoftReference<String>(abc); //2
     WeakReference<String> wea kRef = new WeakReference<String>(abc); //3
     abc=null; //4
     softRef.clear();//5
    

    第一行在
    heap 堆中创建内容为“ abc ”的对象,并建立 abc 到该对象的强引用,该对象是强可及的。
    第二行和第三行分别建立对
    heap 中对象的软引用和弱引用,此时 heap 中的 abc 对象已经有 3 个引用,显然此
    时 abc 对象仍是强可及的。
    第四行之后
    heap 中对象不再是强可及的,变成软可及的。第五行执行之后变成弱可及的。
    软引用( SoftReferenc)如果一个对象只具有软引用,那么如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的速缓存。
    软引用可以和一个引用队列(
    ReferenceQueue )联合使用,如果软引用所引用的对象被垃圾回收 Java 虚
    拟机就会把这个软引用加入到与之关联的引用队列中。

    软引用是主要用于内存敏感的高速缓存。jvm 报告内存不足之前会清除所有的软引用,这样以来 gc 就可能收集软可 及的对象,可能解决内存吃紧问题,避免内存溢出。什么时候会被收集取决于 gc 的算法和 gc 运行时可用内存的大小。当 gc 决定要收集软引用时执行以下过程 以上面的 softRef 为例:

    1. 首先将 softRef 的 referent abc )设置为 null ,不再引用 heap 中的 new String(“abc”) 对象。
    2. 将 heap 中的 new String(“abc”) 对象设置为可结束的 (finalizable)
    3. 当 heap 中的 new String(“abc”) 对象的 finalize() 方法被 运行而且该对象占用的内存被释放, softRef被添加到它的 ReferenceQueue.注意 对 ReferenceQueue 软引用和弱引用可以有可无,但是虚引用必须有。

    弱引用与软引用的区别在于 :只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。

    弱引用

    可以和一个引用队列( ReferenceQueue )联合使用,如果弱引用所引用的对象被垃圾回收 Java 虚拟机就会把这个弱引用加入到与之关联的引用队列中。

    虚引用( PhantomReferenc)

    虚引用 顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。虚引用主要用来跟踪对象被垃圾回收的活动。
    虚引用与软引用和弱引用的一个区别在于:
    虚引用必须和引用队列( ReferenceQueue )联合使用 。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

    展开全文
  • 学过Java的人们都知道,Java的类型一般两种,一种是基本数据类型,另一种是引用数据类型。其中,基本数据类型的值通常储存与栈内存,用于...因此四种引用类型可以说是大家在学习Java的过程经常会接触到的。那么...
  • Java引用类型有哪些

    万次阅读 2019-07-05 16:48:32
    其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧: 1、Java中有哪几种引用?...
  • 本文漏的图片已经补上,请放心...Java中一共四类八种基本数据类型,看下表:除掉这四类八种基本类型,其它的都是对象,也就是引用类型,包括数组。来看一段示例代码:一个Person类,提供了一个构造方法,一些get/...
  • Java中有哪些数据类型 Java中数据类型分为基本数据类型引用数据类型。 基本类型: 基本类型 大小 默认值 最小值 最大值 包装类型 boolean ---- ---- ---- ---- Boolean char 16bits \u0000 \u0000 \...
  • java中引用数据类型有哪些

    万次阅读 多人点赞 2016-07-18 09:45:37
    Java中有俩种数据类型,其中主要有8中基本数据类型引用数据类型,除了8中基本数据类型以外都是引用数据类型,8中基本数据类型分别是byte,short,int,long,char,boolean,float,double,具体如下:1、boolean:数据值...
  • 引用是Java面向对象的一个特点,在Java入门,我们会接触到四种Java引用类型,具体包括这几个:1、强引用强引用是一种最常见的引用形式,同时也较为普遍。如果内存空间不足,Java虚拟机将会抛出OutOfMemoryError...
  • 上两次课我们知道了,java语言的两种数据...相应的,变量也就两种类型:基本类型和引用类型。基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。引用类型,可是引用类型呢?它是一个对象类型的...
  • FAQ2.09 Java中有哪些数据类型? 答: Java中的数据类型分为基本数据类型引用数据类型引用数据类型分3种:类,接口,数组 基本数据类型又分数值类型和布尔类型 布尔类型:boolean(逻辑型) true or false...
  • Java中有哪些数据类型? 答: Java中的数据类型分为基本数据类型引用数据类型引用数据类型分3种:类,接口,数组 基本数据类型又分数值类型和布尔类型 布尔类型:boolean(逻辑型) true or ...
  • java中引用类型有哪些 Java中对象的引用分为四种级别,这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。  强引用(StrongReference) 这个就不多说,我们写代码天天在用的就是强引用。如果一个...
  • 其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧: 1、Java中有哪几种引用?...
  • 数据类型 数据类型基本类型四类八种引用类型类,接口,数组 基本数据类型 基本类型整数byteshortintlong浮点数字符型
  • 从一开始学习Java我们就知道Java的数据类型一般两种,一种是基本数据类型,另一种是引用...Java中主要包括了四种引用类型,分别是:强引用,软引用,弱引用以及虚引用。 一、强引用 强引用是一种最常见的引用形式,
  • 一、基本数据类型byte、short、int、long(整数类型)float、double(浮点数类型)char(字符型)boolean(布尔类型 )Java数据大多数存放在堆栈。栈区:存放局部变量,对象声明的引用等。堆区:存放 new关键字 创建的类...
  • (推荐:java视频教程)java四类八种基本数据类型第一类:整型 byte short int long第二类:浮点型 float double第三类:逻辑型 boolean(它只有两个值可取true false)第四类:字符型 char在栈可以直接分配内存的数据...
  • java 的数据类型分为两大类:值类型(基本数据类型)和引用类型(复合数据类型)一:值类型:整数类型(byte,short,int,long) 浮点类型(float,double) 布尔类型(boolean) 字符类型(char)二:引用值类型:除了值类型...
  • java中的数据类型分为基本数据类型引用数据类型。基本数据类型一、4种整型byte 1字节 -128——127short 2 字节 -32,768 —— 32,767int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿)long 8 字节 -...
  • (推荐:java视频教程)java四类八种基本数据类型第一类:整型 byte short int long第二类:浮点型 float double第三类:逻辑型 boolean(它只有两个值可取true false)第四类:字符型 char在栈可以直接分配内存的数据...
  • java核心技术卷I里一个结论我觉得挺有意思的:java中没有引用传递,只有值传递首先看定义:值传递,是指方法接收的是调用者提供的值引用传递,是指方法接收的是调用者提供的变量地址以前学习C++时把参数传递分为值...
  • 分类基本数据类型数值型整数类型(byte,short,int,long)浮点类型(float,double)字符型(char)布尔型(boolean)引用数据类型类(class)接口(interface)数组([])Java基本数据类型图switch 是否能作用在 byte 上,是否能...
  • Java中的数据类型分为两大类分别是基本类型和引用类型,基本类型包含int,float,double,char,boolean等八种类型,引用类型包含类,数组,接口三种类型。【推荐课程:Java教程】java数据类型:1、基本数据类型...
  • java基本数据类型就8种,记住就好了。除了这些都是引用型的了。java四类八种基本数据类型第一类:整型 byte short int long第二类:...引用数据类型:是数据的引用在栈,但是他的对象在堆。要想学好Java必须知道...
  • java中的数据类型有哪些

    千次阅读 2020-09-07 16:17:07
    java中的数据类型有哪些? 数据类型主要分为基本数据类型引用数据类型。 基本数据类型主要包括: 整数类型: byte、short、int、long 浮点数:float、double 布尔类型:boolean 字符类型:char 引用数据类型主要...
  • 从性能上说java中的基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建的,(对象的引用在堆栈上创建)。比如 Integer i=new Integer(10); 其中new Integer()是java中什么是类的封装性JAVA中常用的封装方式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 691
精华内容 276
关键字:

java中有哪些引用类型

java 订阅