首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java基础:二、引用操纵对象(1)

尽管Java中一切都是对象,但我们实际操作的标识符实际上是对象的一个引用,举个例子,我们可以把这个关系想象成遥控器(引用)来操纵电视机(对象)。...只要握住了这个遥控器,就能保持与电视机的连接,当我们想改变频道或者减少音量时,实际操控的是遥控器(引用),再由遥控器来调控电视机(对象),此外,即使没有电视机,遥控器亦可独立存在。...也就是说,你拥有一个引用,并不一定需要有一个对象与它关联 如果想操作一个词或句子,可以创建一个String引用:String s 这里创建的只是引用,并不是对象,如果此时调用string的一个方法,就会返回一个运行时错误...,只是因为此时s实际上没有与任何事物相关联,因此,一种安全的做法是:创建一个引用的同时便进行初始化 String s = "asdf" 这里用到了Java语言的一个特性,字符串可以带引号的文本初始化

37800
您找到你想要的搜索结果了吗?
是的
没有找到

Java引用类型:强引用,软引用,弱引用,虚引用

Java中提供了4个级别的引用:强引用,软引用,弱引用,虚引用。在这4个引用级别中,只有强引用FinalReference类是包内可见,其他3中引用类型均为public,可以在应用程序中直接使用。...强引用 Java中的引用,有点像C++的指针,通过引用,可以对堆中的对象进行操作。...这时候显式置null的作用不大,只要在我们的方法退出,即该栈桢从Java虚拟机栈弹出时,o指向Object的引用就断开了,此时Object在堆上分配的内存在GC时就能被回收。...可以通过java.lang.ref.SoftReference使用软引用,一个持有软引用的对象,不会被JVM很快回收,JVM会根据当前堆的使用情况来判断何时回收,当堆使用率临近阈值时,才会去回收软引用对象...在java doc中,软引用是这样描述的 虚拟机在抛出 OutOfMemoryError 之前会保证所有的软引用对象已被清除。

2.2K31

【小家java引用类型(强引用、软引用、弱引用、虚引用

1、概述 本文不论述java中值传递和引用传递之间的问题(有需求的可移步理解java中值传递和引用传递),而重点讨论Java中提供了4个级别的引用:强应用、软引用、弱引用和虚引用。...这四个引用定义在java.lang.ref的包下。...软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。...一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用 先看一个最简单的使用...obj = null; //删除掉强引用 这时,Obj对象就只剩下软引用了,是软可达的。这个时候如果get(),返回值就有可能是null了,因此使用的时候要十分注意。

2K40

Java的强引用、软引用、弱引用、虚引用

Java设计这个方法可以被覆写是为了让有些对象在回收前做一些检查,完成一些前置条件再被垃圾回收。正式代码不建议使用。因为是测试,所以为了验证效果,这里打印GC日志信息。...实验说明一下,为了防止JVM自动调整堆大小,我们把堆设置-Xmx200M。...弱引用引用是发生了一次垃圾回收后,既存的弱引用对象就开始回收。通常,一个弱引用对象仅能生存到下一次垃圾回收前。 实验说明一下,为了防止JVM自动调整堆大小,我们把堆设置-Xmx200M。...一个像是从来没有存在过的幻影有什么呢?Java的Unsafe类和NIO都可以直接访问堆外内存。堆外内存GC管不了,这时候虚引用就排上用场了。我们可以通过引用队列跟踪垃圾回收,做好善后。...总结 Java的强软弱虚引用被回收的时机不同:强引用引用被释放才会回收;软引用是没释放,但是快OOM了就会被回收;弱引用引用没释放,但是发生了GC后就会被回收;虚引用随时会回收,好像没有存在过,但是会有一个队列来跟踪它的垃圾回收情况

2K31

Java 的强引用、弱引用、软引用、虚引用

Java四种引用包括强引用,软引用,弱引用,虚引用。...弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。...2 如果使用软引用 SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。...也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。...3 使用ReferenceQueue清除失去了软引用对象的SoftReference 作为一个Java对象,SoftReference对象除了具有保存软引用的特殊性之外,也具有Java对象的一般性。

1.5K10

Java 的强引用、弱引用、软引用、虚引用

如下: Object o=new Object(); // 强引用        当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题...软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。...,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。...当你想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候你就是引用。    ...5、总结     Java4种引用的级别由高到低依次为: 强引用  >  软引用  >  弱引用  >  虚引用     通过图来看一下他们之间在垃圾回收时的区别: ?

3.6K30

图片内容转文字Java怎么实现?

有时,我们希望自动化的完成双手从图像重写文本的任务。 针对这些任务,光学字符识别(OCR)被设计成一种允许计算机以文本形式“阅读”图形化内容的方法,和人类工作的方式相似。...它为许多语言提供了API,不过我们将专注于 Tesseract 的 Java API 。 很容易使用 Tesseract 来实现一个简单的功能。...提供这样一张图片会获得完美的结果: Optical Character Recognition in Java is made easy with the help of Tesseract' 不过这张图片扫描起来过于简单了...现在,为了让程序使用起来更简单,我们把它转换成一个十分简单的 Spring Boot 应用程序,更加舒适的图形化界面来展示结果。...添加一个图片并提交它,屏幕上的结果将会包含提取的文本和上传的图片: ? 成功了!

4K31

Java引用

定义 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器宁愿抛出OOM(OutOfMemoryError)也不会回收它。...说明 不要被这个强字吓到,以为这个引用就很厉害,其实强引用就是程序中使用的一般引用类型。举个简单的栗子: String s = new String("Hello Frank!")...当你声明一个变量并指向一个实例的时候,其实就是在创造一个强引用。那么,既然叫强引用,它“强”在哪里呢?...如果你不需要使用某个对象了,可以将相应的引用设置为null,消除强引用来帮助垃圾回收器进行回收。因为过多的强引用也是导致OOM的罪魁祸首。...小结 所以小结一下强引用的特点: 强引用就是最普通的引用 可以使用强引用直接访问目标对象 强引用指向的对象在任何时候都不会被系统回收 强引用可能会导致内存泄漏 过多的强引用会导致OOM

1.2K20

Java引用类型

前言 使用Java开发,我们不需要去管理对象的生命周期,因为JVM会帮我们回收垃圾,不过这就是安全的吗,显然不是,因为JVM 的堆区存在了很多未回收的对象实例,那么就有可能发生内存溢出,所以我们就有必要在对强引用...,弱引用,软引用,虚引用 有所了解。...软引用应用例子 比如我们需要读取大量的图片到内存中来,以提高查询的速度,如果每次每次读取都从文件服务器读取,那么性能会有很大的影响, 所以这里就存放在内存中,但是由于存放大量的图片在内存中,可能会导致内存溢出...does not exist"); return null; } return img.get(); } } 如上定义了一个Map来存放图片...,key为图片url,value为图片对象的软引用

59510

java 引用类型

我刚接触java、对于引用的认识。就是 Student stu=new Student();stu就是那个引用,至于这个stu是个什么样的引用,就不太清楚了。...java 中对象的引用类型分为四种:强引用、弱引用、弱引用、虚引用引用(StrongReference) 就是我们平时最常用的,Student stu=new Student();这里的引用就是个强引用...它的作用是引用一个对象,但是并不阻止该对象被回收。如果使用一个强引用的话,只要该引用存在,那么被引用的对象是不能被回收的。弱引用则没有这个问题。...hash表允许使用任何Java对象作为键来使用。当一个键值对被放入到hash表中之后,hash表对象本身就有了对这些键和值对象的引用。...这种引用,讲真,我没用到过,顺道了解到的而已。据说在一些较为精准的场景下会进行使用。不过可能导致,对象回收的效率下降,据说…… 这就是java 引用的基本类型了。

90110

Java引用

下面的代码会让s再次持有对象的强引用: s = softRef.get(); 如果在softRef指向的对象被回收前,引用指向该对象,那这个对象又会变成强可达。...但是,由于图片占用内存空间比较大,缓存的图片过多会占用比较多的内存,就可能比较容易发生OOM。这时候,软引用就派得上用场了。...注意,SoftReference对象是用来保存软引用的,但它同时也是一个Java对象。...软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。...下面SoftReference来实现一个简单的缓存类: public class SoftCache { // 引用队列 private ReferenceQueue referenceQueue

1.2K30

Java基础 之软引用、弱引用、虚引用

7.2 如果使用软引用     SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。...也就是说, 一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference类所提供的 get()方法返回Java对象的强引用。... WeakHashMap修复 SocketManager。...     WeakHashMap 引用承载映射键,这使得应用程序不再使用键对象时它们可以被垃圾收集,get() 实现可以根据 WeakReference.get() 是否返回 null 来区分死的映射和活的映射...如果关联的引用队列创建弱引用,在弱引用对象成为 GC 候选对象时,这个引用对象就在引用清除后加入到引用队列中(具体参考上文软引用示例)。

91040

聊聊Java引用类型(强引用、软引用、弱引用、虚引用),示例WeakHashMap的使用【享学Java

引用类型数据的变量值会存放在堆中,变量名(引用地址)会存放在栈中。 值类型的数据具有较快的存取速度 Java引用类型 在Java中提供了四个级别的引用:强引用,软引用,弱引用和虚引用。...SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。...也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。...下面示例来证明这一点: 同样的,运行时请调整虚拟机参数为:-Xmx2m -Xms2m规定堆内存大小为2m。...: Java heap space at com.fsx.maintest.Main.main(Main.java:16) 因为我们的HashMap,所以最终内存不够就OOM了~ 使用WeakHashMap

1.2K30

Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )

文章目录 一、静态变量 二、 Java 引用类型 ( 强、软、弱、虚 ) 一、静态变量 ---- GC Root 对象 : 线程栈 中的 栈帧 中的 局部变量表 中的 引用对象 ; 方法区 中的 静态引用对象...Root 为起点的调用链中 , 这些对象始终都无法变为 垃圾对象 , 无法被回收 , 这就造成了内存泄漏 ; 二、 Java 引用类型 ( 强、软、弱、虚 ) ---- 参考博客 : 【Android...内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 ) 强引用 , StrongRefrence , Java 默认的引用 , 如果被 强引用 引用的对象 , 永远都不可能被回收..., 即使出现了 OOM ; 内存泄漏也是强引用导致的 ; 软引用 , SoftRefrence , 当 系统内存不足时 , 软引用即使还引用着对象 , 也要将该对象回收 ; 将要出现 OOM 时 ,..., 获取到的是 null , 虚引用就是不存在的引用 , 几乎很少使用 ; 强引用 ( 不回收 ) > 软引用 ( OOM 前回收 ) > 弱引用 ( GC 必回收 ) > 虚引用 ( 回收前通知 )

76820

【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )

文章目录 一、 Java 引用类型 ( 强、软、弱、虚 ) 二、 软引用代码示例 三、 弱引用代码示例 强引用 ( 不回收 ) > 软引用 ( OOM 前回收 ) > 弱引用 ( GC 必回收 ) >..., 持有短生命周期对象的引用 , 并且是强引用持有 , GC 无法释放该短生命周期对象引用 , 造成 OOM ; 一、 Java 引用类型 ( 强、软、弱、虚 ) ---- 1...., 但不是必须的对象 , 对象被软引用引用 , 当系统内存严重不足 , 在报出 OutOfMemoryError 错误之前就会将软件释放掉 , 如果将软引用释放掉之后 , 还是内存不足 , 就会报...软引用代码示例 : import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; public class Main...软引用代码示例 : import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; public class Main

5.2K10

java学习引用类型之虚引用

引用(Phantom Reference)是Java中最弱的一种引用类型,它在Java.lang.ref包中定义。...与弱引用和软引用不同,虚引用主要用于跟踪对象被垃圾回收器回收的活动,并不能通过虚引用获取到对象的实例。虚引用的特点如下:获取对象:无法通过虚引用直接获取到被引用的对象实例。...当对象被垃圾回收器回收时,会将该虚引用添加到关联的引用队列中,通过监视该引用队列可以得知对象已经被回收。...下面是一个简单的示例代码,演示了如何使用虚引用引用队列来追踪对象的销毁过程:import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue...当垃圾回收器准备回收一个对象时,如果发现它的虚引用已经添加到引用队列中,那么会将虚引用放入引用队列,并通过监视该引用队列判断对象是否已被回收。

32530
领券