Android面试题目之(9) 幽灵引用
幽灵引用是android中最不会使用的引用,其作为finalize的替代方案,可以避免finalize的timeout。但是有时候并不是很好用,应为其发生在finalize之后,而这时候,这个对象已经不复存在。
这里的思想是,对象不能不存在,这个时候用另外一个对象去表示对这个对象的引用。
这样的话,对象就可以存在了,类似智能指针。
当然我们也可以用weakreference 做类似的事情,weakreference最大的问题是,weakreference.get()返回null的时候, 不一定 finalize()已经被调用,这个顺序很难确定。当然我们其实也不关心这个,只要我们能够收到finalize()或者将要finalize()的事件就可以了。
package sort;import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.util.ArrayList;
import java.util.List;import sort.Refer.ReferInfo;public class Refer<T extends Releasable> {
private static ReferenceQueue<Refer<? extends Releasable>> queue = new ReferenceQueue<>();public static class ReferInfo<T extends Releasable> {private T t;private PhantomReference<Refer<? extends Releasable>> phantomRef = null;}private T t;private static List<ReferInfo<Releasable>> mInfos = new ArrayList<>();static {start();}public static void start() {new Thread(new Runnable() {public void run() {while (true) {synchronized (mInfos) {queued = key.queue.remove(Integer.Max);if (queued != null) {for (ReferInfo<?> key : mInfos) {//TODO:if(key.phantomRef == queued){System.out.println("enqueued!");key.t.release();}mInfos.remove(key);break;}}}try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.gc();}}}).start();}public Refer(T t) {this.t = t;ReferInfo<Releasable> info = new ReferInfo<>();info.phantomRef = new PhantomReference<>(this, queue);info.t = t;synchronized (mInfos) {mInfos.add(info);}}@Overrideprotected void finalize() throws Throwable {super.finalize();System.out.println("finalize");}
}
下面是一个releasable
package sort;public interface Releasable {void release();
}
下面是一个使用方法:
package sort;import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;public class PhantomreferenceStudy implements Releasable {public static void main(String[] args) throws InterruptedException {System.out.println(".....");Refer refer = new Refer(new PhantomreferenceStudy());refer = null;while (true) {System.gc();}}@Overridepublic void release() {//在这里做一些清理的工作。而不是finalize, 这个方法发生在finalize之前。}
}
打印:
.....
finalize
enqueued!
完毕
Android面试题目之(9) 幽灵引用相关推荐
- 一个BAT大厂面试者整理的Android面试题目!
身边好多朋友都裸辞了,出去旅游了一圈之后,回来才发现,工作并没有想象中那么好找.朋友小A一心只想进大厂面试Android,于是面试了阿里巴巴.美团.滴滴等,最后在某个大厂经历了5轮面试后拿到了offe ...
- 应该是史上最全最新Java和Android面试题目(自己总结和收集的)
Android面试题目 Java 基础 int占用几个字节 讲一下常见编码方式? UTF-8编码下中文占几个字节 int和Interger的区别 int.char.long各占多少字节数 string ...
- 某通信公司的Android面试题目
某通信公司的Android面试题目 今天的面试感觉做的不是很好,有些知识点明显没有掌握好,现在抽空把面试题目抄下来,同时努力掌握好对应的知识点. stack和heap有什么区别? heap是堆,sta ...
- Android面试题目(1-2-3--7)
网上收集的Android 题目一 1.Activity生命周期说下,出现异常主要在那个阶段处理? 2.数据存储有哪几种方式?说过你用过哪些,做了哪些相关的项目?Sqlite用过说下? 3.Adapte ...
- android面试题目
最近才开的博客,希望大家多多关注,andorid开发也做了3年有余了,也面试多家企业,借此机会分享一下,我们中遇到过的问题以及解决方案吧,希望能够对正在找工作的andoird程序员有一定的帮助.学完& ...
- 最新BAT大厂面试者整理的Android面试题目模板,成功入职字节跳动
前言 **一年中第一段跳槽高潮就要来了,**看到同事一个个离职,又有一部分同事已经找到满意的工作,于是自己也盲目的开始面试起来(期间也没有准备充分),日夜奔走,简历投了很多家公司,然后就是一连串的面试 ...
- 最新BAT大厂面试者整理的Android面试题目模板,分享PDF高清版
前言 从毕业到现在面试也就那么几家公司,单前几次都比较顺利,在面到第三家时都给到了我offer!前面两次找工作,没考虑到以后需要什么,自己的对未来的规划是什么,只要有份工作,工资符合自己的要求就行!所 ...
- Android面试题目及其答案
第一篇 1.Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalv ...
- 2022最新Android面试题目解答,Android MVP模式详解
开头 Android开发,假如开始没有任何的开发经验的话, 千万不要着急,不要想着在短时间内就把一个语言学习好, 因为你之前没有任何的学习经验, 在这个过程中需要有耐心地学习完JAVA的基础知识, 然 ...
最新文章
- Linux访问Windows磁盘实现共享
- bash之逻辑控制---for语句
- Qt 原理-MOC(1)Meta Object Compiler
- UVA 10564 计数DP
- PHP使用GD库封装验证码类
- jquery模糊查询
- 爬虫,关于 video 标签 src 带有blob:http的 一些想法
- apmserver导入MySQL_mysql数据库导入导出
- 设置build.gradle打包时自动加时间
- 【项目管理】用LoC衡量程序员的工作效率是不科学的
- 【工具】sysbench 0.5 简介
- 集群-如何理解集群?
- VB移动没有标题的窗体
- [渗透测试] DOS攻击
- CentOS7.5下KVM虚拟机安装
- 安川g7接线端子图_安川G7变频器各接线端子功能说明
- tp6 thinkswoole 使用极光curl请求时报错
- ns-3中的数据跟踪与采集——Tracing系统的配置
- Win10打开文件夹闪退怎么解决
- 离线安装tensorboardx_pytorch安装
热门文章
- html中<pre>标签
- java 集合快速排序_搞定Java快速排序
- honey select 模型导出_道路建模-基本模型
- vscode安装本地服务器_如何用本地的VSCode连接极链AI的GPU服务器
- 添加javascript代码:_JavaScript的使用
- js获取当前日期_vue项目中获取前后N天日期
- zookeeper3.4集群搭建
- 防火墙 之 iptables 匹配条件讲解
- 电子商务企业借力呼叫中心提高效率
- Codeforces Round #383 (Div. 1) C(二分图)