Java中几个Reference常见的作用详解
前言
Java中几个Reference作用,也是面试的时候经常问到的问题,以前总是记一次忘一次,现在有时间,索性写个demo测试一把。下面来一起看看详细的介绍:
具体代码如下:
JVM 参数: -Xmx10m -Xms5m -XX:+PrintGC
SoftReference的时候:
weakReference的时候:
StrongReference:
由于strong是JVM默认的,这里就不做了,直接就是一点都不会被回收,直至OOM
PhantomReference:
虚引用并不会改变内存回收机制,只是在回收的时候放到ReferenceQueue里通知用户可做一些额外操作,比如打印日志等
如下代码,本质上byte[]还是一个强引用的。
输出:
总结一下:
- StrongReference:JVM默认,除非GC时已无任何对象引用,否则即便是OOM也不会回收
- WeakReference:一旦没有被引用,GC时就会回收
- SoftReference:和strong一样,除非GC时已无任何对象引用,否则....在即将OOM前才会被回收,所以SoftReference一般可以用来做缓存
- sun.nio.ch.Util中就有private static ThreadLocal<SoftReference<SelectorWrapper>> localSelector
- = new ThreadLocal<SoftReference<SelectorWrapper>>();
- 用于临时的Selector。
- PhantomReference:通过构造函数的ReferenceQueue作为一个通知,用来在对象被回收时做额外的操作。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Java 中 Reference用法详解
Java Reference详解 在 jdk 1.2 及其以后,引入了强引用.软引用.弱引用.虚引用这四个概念.网上很多关于这四个概念的解释,但大多是概念性的泛泛而谈,今天我结合着代码分析了一下,首先我们先来看定义与大概解释(引用类型在包 Java.lang.ref 里). 1.强引用(StrongReference) 强引用不会被GC回收,并且在java.lang.ref里也没有实际的对应类型.举个例子来说: Object obj = new Object(); 这里的obj引用便是一个强引
-
Java Reference源码解析
Reference对象封装了其它对象的引用,可以和普通的对象一样操作,在一定的限制条件下,支持和垃圾收集器的交互.即可以使用Reference对象来引用其它对象,但是最后还是会被垃圾收集器回收.程序有时候也需要在对象回收后被通知,以告知对象的可达性发生变更. Java提供了四种不同类型的引用,引用级别从高到低分别为FinalReference,SoftReference,WeakReference,PhantomReference.其中FinalReference不对外提供使用.每种类型对应着不
-
Java中几个Reference常见的作用详解
前言 Java中几个Reference作用,也是面试的时候经常问到的问题,以前总是记一次忘一次,现在有时间,索性写个demo测试一把.下面来一起看看详细的介绍: 具体代码如下: JVM 参数: -Xmx10m -Xms5m -XX:+PrintGC SoftReference的时候: weakReference的时候: StrongReference: 由于strong是JVM默认的,这里就不做了,直接就是一点都不会被回收,直至OOM PhantomReference: 虚引用并不会改变内存回收
-
java 中序列化与readResolve()方法的实例详解
java 中序列化与readResolve()方法的实例详解 readResolve方法是作用是什么?这个方法跟对象的序列化相关(这样倒是解释了为什么 readResolve方法是private修饰的). 怎么跟对象的序列化相关了? 下面我们先简要地回顾下对象的序列化.一般来说,一个类实现了 Serializable接口,我们就可以把它往内存地写再从内存里读出而"组装"成一个跟原来一模一样的对象.不过当序列化遇到单例时,里边就有了个问题:从内存读出而组装的对象破坏了单例的规则.单例是要
-
java中关于return返回值的用法详解
我们输入一个条件时,系统就会对这个条件进行判断,然后给出一个返回时的结论,我们把这个结果看做是返回值.在java里可以使用return语句来进行返回,从字面意思就能很好的理解它的用法了.下面我们就return的有无返回值进行分类展示,同时带来代码的实例分享. 1.定义 return语句可以使其从当前方法中退出,返回到调用该方法的语句处,继续程序的执行. 2.返回语句两种格式 有返回值: (1)return 返回值: (2)return 0 代表程序正常退出, (3)return 1 代表程序异常
-
Java中的重要核心知识点之继承详解
目录 一.继承 1.概念 2.语法 3.父类成员的访问 (1)子类中访问父类成员变量 (2)子类中访问父类成员方法 4.super关键字 5.子类构造方法 6.super和this 7.代码块执行顺序 8.父类成员在子类中的可见性 9.继承方式 10.final关键字 11.组合 一.继承 1.概念 继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增加新功能,这样产生新的类,称派生类.继承呈现了面向对象程序设计的
-
Java中Validated、Valid 、Validator区别详解
目录 1. 结论先出 JSR 380 Valid VS Validated 不同点? Validator 2. @Valid和@Validated 注解 3. 例子 4.使用@Valid嵌套校验 5. 组合使用@Valid和@Validated 进行集合校验 6. 自定义校验 自定义约束注解 工作原理 结论 参考链接: 1. 结论先出 Valid VS Validated 相同点 都可以对方法和参数进行校验 @Valid和@Validated 两种注释都会导致应用标准Bean验证.
-
Java 中 Class Path 和 Package的使用详解
目录 一. 类路径 (class path) 二. 包 (package) 三. jar 文件 一. 类路径 (class path) 当你满怀着希望安装好了 java, 然后兴冲冲地写了个 hello world,然后编译,运行, 就等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can't find class HelloWorld 或者 Exception in thread "main" java.lang.NoSuchMethodError : maain.为什么
-
java 中Excel转shape file的实例详解
java 中Excel转shape file的实例详解 概述: 本文讲述如何结合geotools和POI实现Excel到shp的转换,再结合前文shp到geojson数据的转换,即可实现用户上传excel数据并在web端的展示功能. 截图: 原始Excel文件 运行耗时 运行结果 代码: package com.lzugis.geotools; import com.lzugis.CommonMethod; import com.vividsolutions.jts.geom.Coordina
-
基于java中的PO VO DAO BO POJO(详解)
一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的ava对象. 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合PO中应该不包含任何对数据库的操作. 二.VO:value object值对象.通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已.但应是抽象出的业务对象可以和表对应也可以不这根据业务的需要 三.DAO:data access object 数据访问对象,此对象用于访问数据库.通常和PO结合使用,DAO中包含了各种
-
JAVA 中解密RSA算法JS加密实例详解
JAVA 中解密RSA算法JS加密实例详解 有这样一个需求,前端登录的用户名密码,密码必需加密,但不可使用MD5,因为后台要检测密码的复杂度,那么在保证安全的前提下将密码传到后台呢,答案就是使用RSA非对称加密算法解决 . java代码 需要依赖 commons-codec 包 RSACoder.Java import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.
-
Java 中组合模型之对象结构模式的详解
Java 中组合模型之对象结构模式的详解 一.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 二.适用性 你想表示对象的部分-整体层次结构 你希望用户忽略组合对象与单个对象的不同,用户将统一使用组合结构中的所有对象. 三.结构 四.代码 public abstract class Component { protected String name; //节点名 public Component(String n
随机推荐
- 浅谈在vue项目中如何定义全局变量和全局函数
- 详解iOS中Button按钮的状态和点击事件
- 基于JSP的RSS阅读器的设计与实现方法(推荐)
- c# xml API操作的小例子
- 利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享
- PHP 日期加减的类,很不错
- SSH框架网上商城项目第8战之查询和删除商品类别功能实现
- 实例讲解JSP Model2体系结构(下)
- JavaScript 数组的进化与性能分析
- 老生常谈jacascript DOM节点获取
- jQuery数组处理代码详解(含实例演示)
- Jquery中Event对象属性小结
- jQuery.position()方法获取不到值的安全替换方法
- jQuery EasyUI 入门必看
- jQuery Ajax中的事件详细介绍
- Java中如何获取mysql连接的3种方法总结
- Cisco路由器故障诊断技术专题
- PHP调用其他文件中的类
- unittest+coverage单元测试代码覆盖操作实例详解
- iOS11中的定位授权的解决方法