Java引用类型有哪些

作者: 编程说书酱 | 来源:发表于2019-07-05 16:37 被阅读0次

动力节点Java培训最新上线Java实验班,等你来测试自己适不适合学习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();

相关文章

  • 进阶任务-4

    引用类型有哪些?非引用类型有哪些2.如下代码输出什么?为什么? 引用类型有哪些,非引用类型有哪些引用类型:数组,对...

  • JavaScript基础三

    1、引用类型有哪些?非引用类型有哪些 引用类型:Object非引用类型:number string null ...

  • Java引用类型有哪些

    动力节点Java培训最新上线Java实验班,等你来测试自己适不适合学习Java编程哦! Java类型一般有两种,即...

  • 引用类型与对象拷贝

    1.引用类型有哪些?非引用类型有哪些 引用类型: 对象 object 数组 函数 正则非引用类型...

  • 引用类型对象拷贝思考

    1、引用类型有哪些?非引用类型有哪些 非引用类型 String 类型、Null 类型、Number 类型、Unde...

  • 引用类型与对象拷贝

    1.引用类型有哪些?非引用类型有哪些引用类型:Object / Array / Function / Date /...

  • JavaScript引用类型与对象拷贝

    引用类型有哪些?非引用类型有哪些 引用类型:对象、数组、函数、正则非引用类型:string、number、bool...

  • 引用类型和对象拷贝

    引用类型有哪些?非引用类型有哪些?非引用类型有number、string、boolean、undefined、nu...

  • 引用类型和对象拷贝

    1. 引用类型有哪些,非引用类型有哪些? 基本类型(非引用类型):Number, String, Boolean,...

  • 引用类型和对象拷贝

    1. 引用类型有哪些,非引用类型有哪些? 基本类型(非引用类型):Number, String, Boolean,...

网友评论

    本文标题:Java引用类型有哪些

    本文链接:https://www.haomeiwen.com/subject/novehctx.html