java中引用

      谈论Java肯定离不开其中的垃圾回收机制,无论是通过引用计数算法判断对象的引用数量,还是通过根搜索算法判断对象的引用链是否可达,判断对象是否存活都与“引用”有关。

     在JDK1.2之前,Java中引用的定义很传统:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用和没有被引用的两种状态,对于如何描述一个“食之无味,弃之可惜”的对象就显得无能为力了。希望能够描述一个这样的对象:当内存空间还足够时,则保留在内存中;如果内存在垃圾收集后还是很紧张,则可以抛弃这些对象。

     在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)四种,这四种引用强度依次逐渐减弱。

  1. 强引用就是指在程序代码之中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用还存在,垃圾收集器就永远不会回收掉被引用的对象。
  2. 软引用用来描述一些还有用,但并非必须得对象。对于软引用关联着的对象,在系统将要发出内存溢出异常之前,将会把这些对象列进回收范围之内并进行第二次回收。如果这次回收还是没有足够的内存,才会抛出内存溢出异常。类SoftReference实现软引用。
  3. 弱引用也是用来描述非必须得对象的,但是强度比软引用更弱一些,被弱引用关联的对象只能存活到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。类WeakReference实现弱引用。
  4. 虚引用也称为幽灵引用或者是幻影引用,是最弱的一种引用关系。一个对象是否会有虚引用的存在,完全不会对其生存时间造成影响,也无法通过一个虚引用来获得一个对象实例。为一个对象设置虚引用关联的唯一目的就是 希望能在这个对象被收集器回收时得到一个系统的通知。类PhantomReference实现虚引用。

转载于:https://www.cnblogs.com/leilei-lily/p/4727126.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL SERVER 2014 各个版本支持的功能

转自:https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称EnterpriseBusiness IntelligenceStandardWebExpress with Advanced ServicesExpress with ToolsExpress单个实例使用的最大计算能力(SQL Server 数据库引擎)1操…

关于src和background

今天想修改imageview的src里的图片时,发现居然没有setSrcResource方法,但是setBackGroundResource肯定不行啊。 后来找了好几遍,其实与src对应的就是 setImageResource方法。以后别忘记了哦。转载于:https://www.cnblogs.com/heartstong/p/47…

java 线程只执行一次_java – 如何确保方法只执行一次并且只从一个线程执行?...

ShayHaned的解决方案使用锁定.您可以通过AtomicBoolean使其更高效,如:AtomicBoolean wasRun new AtomicBoolean(false);CountDownLatch initCompleteLatch new CountDownLatch(1);public void initialize() {if (!wasRun.getAndSet(true)) {List metadata getMet…

Android无法生成R文件的终极解决办法

R文件如果在clean项目(Project—>Clean)和 Fix Project Properties(如下图): 如果在第一步无法解决的的时候,那可能原因就是资源文件调用的错误,比如资源文件命名不规范,多余的资…

java link_Java Link类代码示例

import org.nodes.Link; //导入依赖的package包/类public static double sizeBetaCopying(DGraph graph, DGraph sub,List> occurrences, boolean resetWiring, int iterations, double alpha){int numThreads Runtime.getRuntime().availableProcessors();List> wiring…

go read text file into string array

http://stackoverflow.com/questions/5884154/golang-read-text-file-into-string-array-and-write 方法一 1 package main2 3 import (4 "bufio"5 "fmt"6 "log"7 "os"8 )9 10 // readLines reads a whole file into memory …

des加密 ios 和java_三重Des对称加密在Android、Ios 和Java 平台的实现

//// CommonFunc.m// PRJ_base64//// Created by wangzhipeng on 12-11-29.// Copyright (c) 2012年 com.comsoft. All rights reserved.//#import "MyBase64.h"//引入IOS自带密码库#import //空字符串#define LocalStr_None ""static const char en…

BZOJ2976 : [Poi2002]出圈游戏

首先模拟一遍得到n个同余方程&#xff0c;然后用扩展欧几里得求出最小的可行解即可&#xff0c;时间复杂度$O(n^2)$。 #include<cstdio> #define N 30 int n,i,j,k,x,y,a[N],b[N],d[N],ans; namespace Solve{ int flag1,k1,m0,d,x,y; int exgcd(int a,int b,int&x,in…

java awt 教程_JAVA教程 第五讲 AWT图形用户界面设计

5.1 用AWT生成图形化用户界面抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集&#xff0c;AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括&#xff1a; 用户界面组件&am…

从C# String类理解Unicode(UTF8/UTF16)

上一篇博客&#xff1a;从字节理解Unicode&#xff08;UTF8/UTF16)。这次我将从C# code 中再一次阐述上篇博客的内容。 C# 代码看UTF8 代码如下&#xff1a; string test "UTF-8你"; //把字符转换为 byte[] byte[] bytearray_UTF8 Encoding.UTF8.GetBytes(test)…

java mvc mvp_MVC和MVP设计模式

参考博客http://www.cnblogs.com/end/archive/2011/06/02/2068512.html####MVC模式M&#xff1a;model 模型V&#xff1a;view视图C&#xff1a;controller控制器>我们知道&#xff0c;所有的软件的构成主要有两部分&#xff0c;分别是用户交互入口(USER INTERFACE)和数据(D…

python浅拷贝深拷贝

copy_listlist[:] 得到的是浅拷贝&#xff0c;即只能顶层拷贝&#xff0c;里面的嵌套不会复制一份。 a [0, [1, 2], 3] b a[:] a[0] 8 a[1][1] 9 请问现在a和b分别是多少&#xff1f; 答案&#xff1a;是 a 为 [8, [1, 9], 3]&#xff0c;b 为 [0, [1, 9], 3]。 b的第二个…

[转载] KAFKA分布式消息系统

转载自http://blog.chinaunix.net/uid-20196318-id-2420884.html Kafka[1]是linkedin用于日志处理的分布式消息队列&#xff0c;linkedin的日志数据容量大&#xff0c;但对可靠性要求不高&#xff0c;其日志数据主要包括用户行为&#xff08;登录、浏览、点击、分享、喜欢&…

java sleep唤醒_JAVA wait(), notify(),sleep详解(转)

在JAVA中&#xff0c;是没有类似于PV操作、进程互斥等相干的方法的。JAVA的进程同步是通过synchronized()来实现的&#xff0c;需要说明的是&#xff0c;JAVA的synchronized()方法类似于操作系统概念中的互斥内存块&#xff0c;在JAVA中的Object类型中&#xff0c;都是带有1个内…

ACM 错排

Description 大家常常感慨&#xff0c;要做好一件事情真的不容易&#xff0c;确实&#xff0c;失败比成功容易多了&#xff01; 做好“一件”事情尚且不易&#xff0c;若想永远成功而总从不失败&#xff0c;那更是难上加难了&#xff0c;就像花钱总是比挣钱容易的道理一样。 话…

Linux的NTP配置总结

在Linux系统中&#xff0c;为了避免主机时间因为在长时间运行下所导致的时间偏差&#xff0c;进行时间同步(synchronize)的工作是非常必要的。Linux系统下&#xff0c;一般使用ntp服务来同步不同机器的时间。NTP 是网络时间协议&#xff08;Network Time Protocol&#xff09;的…

mysql_real_connect阻塞_mysql_real_connect崩溃、未经处理的异常

mysql_real_connect崩溃、未经处理的异常背景近期客户测试软件&#xff0c;功能里有mysql连接问题&#xff0c;在mysql连接失败时&#xff0c;客户机器上出现“已停止工作”界面&#xff0c;而我机器上软件直接退出没有提示自动关闭。查找分析因为是一直用的代码&#xff0c;和…

java中settimeout作用_关于setTimeout的妙用

定义在指定的延迟时间之后调用一个函数或执行一个代码片段这个是setTimeout最主要的功能&#xff0c;但也是很坑的地方&#xff0c;首先javascript其实是运行在单线程的环境下&#xff0c;意味者定时器会在未来的某个时间支持&#xff0c;但是具体的执行的时间并不能够很准确的…

中兴的一道笔试题

今天做了中兴的秋招题目&#xff0c;有一个题以前没有仔细想过&#xff0c;题目我有点儿记不清楚了&#xff0c;大概意思是这样的&#xff1a;有一个循环的单链表&#xff0c;给定该链表的尾指针比给定头指针好么&#xff1f; 我的思路&#xff1a;如下图&#xff0c;这是一个循…

Linux read 命令

Linux read命令用于从标准输入读取数值。 read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入&#xff0c;当使用重定向的时候&#xff0c;可以读取文件中的一行数据。 语法 read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] […