弱引用

计算机程序设计中,弱引用强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收。一些配有垃圾回收机制的语言,如JavaC#PythonPerlLisp等都在不同程度上支持弱引用。

垃圾回收

垃圾回收用来清理不会再使用的对象,从而降低内存泄露和数据损坏的可能性。垃圾回收主要有两种类型:追踪引用计数。引用计数会记录给定对象的引用个数,并在引用个数为零时收集该对象。由于一次仅能有一个对象被回收,引用计数无法回收循环引用的对象。一组相互引用的对象若没有被其它对象直接引用,并且不可访问,则会永久存活下来。一个应用程序如果持续地产生这种不可访问的对象群组,就会发生内存泄漏。在对象群组内部使用弱引用(即不会在引用计数中被计数的引用)有时能避免出现引用环,因此弱引用可用于解决循环引用的问题。如Apple的Cocoa框架就推荐使用这种方法,具体为,在父对子引用时使用强引用,子对父引用时使用弱引用,从而避免了循环引用。[1]页面存档备份,存于互联网档案馆

程序对一些对象只进行弱引用,通过此法可以指明哪些对象是不重要的,因此弱引用也用于尽量减少内存中不必要的对象存在的数量。

变种

有些语言包含多种强度的弱引用。例如Java,在java.lang.ref[1][2]包中定义了软引用、弱引用和虚引用,引用强度依次递减。每种引用都有相对应的可访问性概念。垃圾回收器(GC)通过判断对象的可访问性类型来确定何时回收该对象。当一个对象是软可访问的,垃圾回收器就可以安全回收这个对象,但如果垃圾回收器认为JVM还能空出可用内存(比如JVM还有大量未使用的堆空间),则有可能不会立刻回收软可访问的对象。但对于弱可访问的对象,一旦被垃圾回收器注意到,就会被回收。和其他引用种类不同,虚引用无法跟踪。但另一方面,虚引用提供了一种机制,当一个对象被回收时程序可以得到通知(实现于ReferenceQueues[3])。 一些未配有垃圾回收机制的语言,比如C++,也提供强/弱引用的功能,以作为对垃圾回收库的支持。在C++中,普通指针可看做弱引用,智能指针可看做强引用,尽管指针不能算"真正"的弱引用,因为弱引用应该能知道何时对象变成不可访问的了。

示例

弱引用可用于在应用程序中维护一个当前被引用的对象的列表。该列表必须弱引用到那些对象,否则一旦对象被添加到列表中,由于它们被列表引用了,在程序运行期间将永远不会被回收。

Java

Java是第一个将强引用作为默认对象引用的主流语言。之前的(ANSI)C语言只支持弱引用。而后David Hostettler Wain和Scott Alexander Nesmith注意到事件树无法正常释放的问题,结果在大约1998年,推出了分别会被计数和不会被计数的强、弱引用。 如果创建了一个弱引用,然后在代码的其它地方用 get()获得真实对象,由于弱引用无法阻止垃圾回收,get()随时有可能开始返回 null(假如对象没有被强引用)。[4]

import java.lang.ref.WeakReference;
 
public class ReferenceTest {
	public static void main(String[] args) throws InterruptedException {
 
            WeakReference r = new WeakReference(new String("I'm here"));
            WeakReference sr = new WeakReference("I'm here");
            System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
            System.gc();
            Thread.sleep(100);
 
            //只有r.get()变为null
            System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());
 
	}
}

弱引用还可以用来实现缓存。例如用弱哈希表,即通过弱引用来缓存各种引用对象的哈希表。当垃圾回收器运行时,假如应用程序的内存占用量高到一定程度,那些不再被其它对象所引用的缓存对象就会被自动释放。

Smalltalk

|a s1 s2|

s1 := 'hello' copy. "这是个强引用"
s2 := 'world' copy. "这是个强引用"
a := WeakArray with:s1 with:s2.
a printOn: Transcript. 
ObjectMemory collectGarbage.
a printOn: Transcript. "两个元素都还在"

s1 := nil. "移除强引用" 
ObjectMemory collectGarbage.
a printOn: Transcript. "第一个元素消失"

s2 := nil. "移除强引用" 
ObjectMemory collectGarbage.
a printOn: Transcript. "第二个元素消失"

Lua

weak_table = setmetatable({}, {__mode="v"})
weak_table.item = {}
print(weak_table.item)
collectgarbage()
print(weak_table.item)

Objective-C 2.0

在Objective-C 2.0中,除了垃圾回收,自动引用计数也会受弱引用的影响。下面这个例子中的所有变量和属性都是弱引用。

@interface WeakRef : NSObject
{
    __weak NSString *str1;
    __assign NSString *str2;
}
 
@property (nonatomic, weak) NSString *str3;
@property (nonatomic, assign) NSString *str4;
 
@end

weak(__weak)和assign(__assign)的区别在于,当变量指向的对象被重新分配时,变量的值是否会跟着改变。weak声明的变量会变为nil,而assign声明的变量则会保持不变,成为一个悬摆指针。从Mac OX 10.7 “狮子”系统和iOS 5开始,随着Xcode 4.1版本的推出,weak引用被引入到Objective-C语言中(4.2版本开始支持iOS)。老版本的Mac OS X、iOS和GNUstep仅支持用assign声明弱引用。

Vala

class Node {
    public weak Node prev; //弱引用可避免列表中的节点之间出现循环引用
    public Node next;
}

Python

>>> import weakref
>>> import gc
>>> class Egg:
...     def spam(self):
...         print("I'm alive!")
...
>>> obj = Egg()
>>> weak_obj = weakref.ref(obj)
>>> weak_obj().spam()
I'm alive!
>>> obj = "Something else"
>>> gc.collect()
35
>>> weak_obj().spam()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'spam'

参考文献

  1. ^ java.lang.ref. [2013-12-28]. (原始内容存档于2022-06-06). 
  2. ^ Nicholas, Ethan. "Understanding Weak References" 互联网档案馆存檔,存档日期2010-08-19.. java.net页面存档备份,存于互联网档案馆). 发布于2006年5月4日. 访问于2010年10月1日
  3. ^ ReferenceQueues. [2013-12-28]. (原始内容存档于2011-09-30). 
  4. ^ weblogs.java.net Java Examples 互联网档案馆存檔,存档日期2010-08-19.

Read other articles:

Pramukopi memasukkan kopi ke gilingan kopi Pramukopi atau barista adalah sebutan untuk seseorang yang pekerjaannya membuat dan menyajikan kopi kepada pelanggan.[1] Kata barista berasal dari bahasa Italia yang berarti pelayan bar. Pekerjaan barista di Indonesia merupakan salah satu pekerjaan yang bebas dari stereotipe gender karena bermunculan beberapa barista maupun q-grader wanita seperty Evani Jesslyn.[2] Aerobie Aeropress Kompetisi barista di Indonesia Sejak tahun 2007 di I...

 

Van Gaal beralih ke halaman ini. Untuk the Main-belt Asteroid, lihat 14616 Van Gaal. LvG beralih ke halaman ini. Untuk other uses, lihat LVG (disambiguation). Nama ini merupakan sebuah nama Belanda; nama keluarganya adalah Van Gaal, bukan Gaal. Louis van Gaal Van Gaal in 2014Informasi pribadiNama lengkap Aloysius Paulus Maria van Gaal[1]Tanggal lahir 8 Agustus 1951 (umur 72)[1]Tempat lahir Amsterdam, BelandaTinggi 6 ft 2 in (1,88 m)[2]Posisi bermain...

 

Resolusi 1033Dewan Keamanan PBBHelikopter transportasi militer di Sahara BaratTanggal19 Desember 1995Sidang no.3.610KodeS/RES/1033 (Dokumen)TopikSahara BaratRingkasan hasil15 mendukungTidak ada menentangTidak ada abstainHasilDiadopsiKomposisi Dewan KeamananAnggota tetap Tiongkok Prancis Rusia Britania Raya Amerika SerikatAnggota tidak tetap Argentina Botswana Republik Ceko Jerman Honduras Indonesia Italia Nigeria ...

Place in Boucle du Mouhoun Region, Burkina FasoSérénaSérénaCoordinates: 12°4′N 3°5′W / 12.067°N 3.083°W / 12.067; -3.083Country Burkina FasoRegionBoucle du Mouhoun RegionProvinceBalé ProvinceDepartmentOury DepartmentPopulation (1996) • Total2,245Time zoneUTC+0 (GMT) Séréna is a town in the Oury Department of Balé Province in southern Burkina Faso. As of 1996 the town had a total population of 2,245.[1] References ^ Burkinab...

 

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Margaret Long Wisdom High School – news · newspapers · books · scholar · JSTOR (December 2010) (Learn how and when to remove this template message) Public, secondary school in Houston, Texas , United StatesMargaret Long Wisdom High SchoolAddress6529 Beverly Hil...

 

Ne pas confondre avec le musée Champollion de Figeac, qui rend également hommage à Champollion Musée ChampollionFaçade de la maison Champollion qui abrite le musée.Informations généralesNom local Maison ChampollionDomaine des OmbragesMaison des champsType Maison-musée, Musée d'histoire, Musée d'artOuverture 5 juin 2021[1] (il y a 2 ans)Dirigeant Caroline DugandSurface 1 100 m2 sur 2,48 ha (domaine)Visiteurs par an env. 45 000 (entre 2004 et 2005)Site web www.museechampol...

追晉陸軍二級上將趙家驤將軍个人资料出生1910年 大清河南省衛輝府汲縣逝世1958年8月23日(1958歲—08—23)(47—48歲) † 中華民國福建省金門縣国籍 中華民國政党 中國國民黨获奖 青天白日勳章(追贈)军事背景效忠 中華民國服役 國民革命軍 中華民國陸軍服役时间1924年-1958年军衔 二級上將 (追晉)部队四十七師指挥東北剿匪總司令部參謀長陸軍�...

 

У этого термина существуют и другие значения, см. Серп (значения). Серп — ручное сельскохозяйственное орудие, используемое для уборки зерновых культур, жатвы хлебов и резки трав (при заготовке фуражных кормов для скота). Содержание 1 История и происхождение 2 Устройство...

 

Helicopter Maritime Strike Squadron 72 (HSM-72)HSM-72 Proud Warriors InsigniaActive5 October 1984 - presentCountry United States of AmericaBranch United States NavyTypeNavy Helicopter SquadronRoleSurface Warfare (SUW)Anti-Submarine Warfare (ASW)Part ofCVW-1Garrison/HQNAS JacksonvilleNickname(s)Proud WarriorsMotto(s)Principled, Disciplined, ConfidentColorsRed and BlueMascot(s)Native American IndianEngagementsGlobal War on TerrorCommandersCurrentcommanderCommander Jeffrey C. StorerMi...

Sony android smartphone This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Sony Xperia XA2 – news · newspapers · books · scholar · JSTOR (November 2...

 

Disambiguazione – Se stai cercando altri significati, vedi Arth (disambigua). Arthcittà Arth – Veduta LocalizzazioneStato Svizzera Cantone Svitto DistrettoSvitto AmministrazioneLingue ufficialiTedesco TerritorioCoordinate47°03′52″N 8°31′27″E / 47.064444°N 8.524167°E47.064444; 8.524167 (Arth)Coordinate: 47°03′52″N 8°31′27″E / 47.064444°N 8.524167°E47.064444; 8.524167 (Arth) Altitudine422 m s.l.m. Superficie4...

 

Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. Будь ласка, допоможіть удосконалити цю статтю, додавши посилання на надійні (авторитетні) джерела. Зверніться на сторінку обговорення за поясненнями та допоможіть виправити недоліки. Мат...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Jurong West Sports and Recreation Centre – news · newspapers · books · scholar · JSTOR (December 2022) (Learn how and when to remove this message) Jurong West Sports and Recreational Centre裕廊西体育场Full nameJurong West ActiveSG StadiumAddress20 Jurong...

 

American basketball player (born 1991) This article is about the basketball player. For the baseball player, see Andre Robertson. André RobersonRoberson with the Oklahoma City Thunder in 2017Free agentPositionShooting guard / small forwardPersonal informationBorn (1991-12-04) December 4, 1991 (age 32)Las Cruces, New Mexico, U.S.Listed height6 ft 7 in (2.01 m)Listed weight210 lb (95 kg)Career informationHigh schoolWagner (San Antonio, Texas)CollegeColorado (2010�...

 

English comedian (1926–1984) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Eric Morecambe – news · newspapers · books · scholar · JSTOR (December 2012) (Learn how and when to remove this message) Eric MorecambeOBEBronze bust by Victor Heyfron, 1963BornJohn Eric Bartholomew(1926-05-14)14 May 1926Morecambe...

Margaret Munnerlyn MitchellLahir(1900-11-08)8 November 1900Atlanta, Georgia, ASMeninggal16 Agustus 1949(1949-08-16) (umur 48)Atlanta, Georgia, ASNama penaMargaret MitchellPekerjaannovelisGenreRoman, novel sejarah Margaret Mitchell, (8 November 1900 – 16 Agustus 1949) adalah seorang penulis Amerika. Ia terkenal karena karyanya Gone with the Wind, sebuah penggambaran klasik atas Negara-negara Selatan pada masa Perang Saudara. Novel ini difilmkan pada 1939 dengan Vivien...

 

2002 CMT Flameworthy AwardsDateJune 12, 2002LocationNashville, TennesseeHosted byKathy NajimyMost awardsKenny Chesney (2)Most nominationsToby Keith (4)Television/radio coverageNetworkCMT CMTMA · 2003 → The inaugural 2002 CMT Flameworthy Awards (now known as the CMT Music Awards) took place on Wednesday, June 12, 2002, from the Gaylord Entertainment Center (now known as Bridgestone Arena) in downtown Nashville, Tennessee, and hosted by Kathy Najimy. The CMT Flameworthy Awards ...

 

National theatre in Vienna, Austria For the film, see Burgtheater (film). BurgtheaterFormer namesK.K. Theater an der BurgK.K. HofburgtheaterK.K. Hoftheater nächst der BurgAddressUniversitätsring 2ViennaAustriaCoordinates48°12′37″N 16°21′41″E / 48.21028°N 16.36139°E / 48.21028; 16.36139TypeTheaterOpened14 March 1741 (1741-03-14)Websiteburgtheater.at The Burgtheater (German: [ˈbʊʁk.teˌaːtɐ]; literally:Castle Theater but alternat...

Ne doit pas être confondu avec Tlacopan. Cet article est une ébauche concernant une localité philippine. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Tacloban Administration Pays Philippines Région Visayas orientales Province Leyte Barangays 138 Maire Alfred S. Romualdez Code postal 6500 Démographie Population 242 089 hab. (2015) Densité 1 200 hab./km2 Géographie Coordonnées 11°&#...

 

Piracétam Identification DCI Piracetam Nom UICPA 2-oxo-1-pyrrolidinacétamide Synonymes 2-(2-oxopyrrolidino)acétamide No CAS 7491-74-9 No ECHA 100.028.466 No CE 231-312-7 No RTECS UX9660500 Code ATC N06BX03 PubChem 4843 SMILES O=C1N(CC(=O)N)CCC1 PubChem, vue 3D InChI InChI : vue 3D InChI=1S/C6H10N2O2/c7-5(9)4-8-3-1-2-6(8)10/h1-4H2,(H2,7,9) InChIKey : GMZVRMREEHBGGF-UHFFFAOYSA-N Apparence poudre[1] Propriétés chimiques Formule C6H10N2O2  [Isomères] Masse m...