Слабая ссылка

В программировании слабая ссылка (англ. weak reference) — специфический вид ссылок на динамически создаваемые объекты в системах со сборкой мусора или с подсчётом ссылок. Отличается от строгих ссылок тем, что сборщик мусора не учитывает связь ссылки и объекта в куче при выявлении объектов, подлежащих удалению. Таким образом слабая ссылка позволяет работать с объектом как и строгая ссылка, но при необходимости объект будет удален, даже при наличии слабой ссылки на него. Обычные ссылки в контексте сборки мусора иногда именуют «сильными».

Содержание понятия

Понятие слабой ссылки существует в системах и языках программирования, где поддерживается сборка мусора — автоматическое удаление из памяти объектов, использование которых прекратилось и более не будет возобновлено. Для определения объектов, подлежащих сборке мусора, используется тот или иной вариант алгоритма определения достижимости — достижимым считается объект, на который в программе существует хотя бы одна ссылка. Когда в программе не осталось ни одной ссылки на объект, то есть использование объекта прекратилось, такой объект может быть удалён в ближайший подходящий момент.

Описанный механизм освобождения памяти может в некоторых случаях порождать утечки памяти из-за «забытых» ссылок, когда ссылки на создаваемые объекты сохраняются в нескольких местах, и при прекращении использования объекта программист не удаляет их все. Во избежание проблем программист вынужден придерживаться достаточно жёсткой дисциплины в использовании ссылок, что не всегда удобно.

Чтобы избежать подобных проблем, язык или среда программирования могут поддерживать так называемые слабые ссылки. Такие ссылки используются так же, как и обычные, но не влияют на сборку мусора, поскольку не учитываются механизмом подсчёта ссылок, и объект, на который существуют такие ссылки, может быть удалён, если только на него не существует обычных ссылок (которые в этом контексте могут именоваться «сильными ссылками»).

Реализация и использование

В распространённых сейчас языках программирования со сборкой мусора — Java и C#, — слабые ссылки поддерживаются на уровне системных библиотек. В Java для этого служат классы java.lang.ref.WeakReference и java.lang.ref.SoftReference, в C# — класс System.WeakReference.

Порядок использования слабых ссылок принципиально одинаков во всех системах.

  1. Когда требуется сохранить слабую ссылку, создаётся объект-реферер (экземпляр класса WeakReference), которому передаётся обычная («сильная») ссылка на целевой объект. Переданная сильная ссылка тут же освобождается, а в реферере хранится её копия в виде, который не может помешать сборщику мусора удалить соответствующий объект. Сам реферер сохраняется как обычный объект, то есть на него должна быть сохранена обычная, «сильная» ссылка.
  2. Когда требуется воспользоваться слабой ссылкой, у реферера вызывается метод get() (в C# — свойство Target), который создаёт и возвращает сильную ссылку на объект, если он ещё существует, или нулевой указатель null (nil), если объект уже удалён сборщиком мусора.
  3. Если реферер вернул действительную ссылку, она далее используется для доступа к объекту обычным образом. Поскольку get() возвращает именно сильную ссылку, во время её использования объект удалён не будет. По завершении её использования объект, на который ссылается реферер, снова становится доступным для сборки мусора. То есть если полученная из реферера сильная ссылка была удалена, для нового использования объекта необходимо получить из реферера новую ссылку и проверить её на равенство нулевому указателю.
  4. Если реферер вернул нулевой указатель, это означает, что объект к моменту обращения уже был удалён сборщиком мусора. Эту ситуацию код программы должен обработать самостоятельно в соответствии с логикой приложения. Например, массив слабых ссылок может работать как кэш для часто используемых данных, хранящихся на внешних носителях; тогда недоступность объекта по слабой ссылке означает необходимость подгрузить его с диска или из СУБД и обновить, при необходимости, запись в кэше.

Режим использования слабых ссылок определяется задачей. Обычная практика — хранение в коллекциях слабых ссылок на объекты, которые нужны только до тех пор, пока приложение эти объекты использует. Когда объект более не требуется и сильные ссылки на него удаляются, слабые ссылки, сохранённые в коллекции, не препятствуют удалению объекта из памяти, благодаря чему можно обойтись без явного удаления их из коллекции.

Особенность класса SoftReference в Java — сборщик мусора при удалении объекта учитывает частоту обращений к нему через эту ссылку, что может быть полезно для реализации кэширования данных, располагающихся, например, на внешних устройствах — коллекция-кэш автоматически дольше удерживает те объекты, к которым чаще обращаются.

Чтобы слабые ссылки на уже не существующие объекты не засоряли память, системные библиотеки предоставляют механизмы для учёта таких ссылок. Вариантом такого механизма являются очереди ссылок — специальные объекты, которые передаются рефереру при создании. Когда сборщик мусора уничтожает объект, на который ссылается слабая ссылка, он помещает в ранее переданную очередь ссылок ссылку на соответствующий реферер. Таким образом, программе доступен список рефереров, содержащих «мёртвые» ссылки, и она может выполнить их удаление в любой подходящий момент.

Ссылки

Read other articles:

Bindlach Lambang kebesaranLetak Bindlach di Bayreuth NegaraJermanNegara bagianBayernWilayahOberfrankenKreisBayreuthSubdivisions7 OrtsteilePemerintahan • MayorHermann Hübner (CSU)Luas • Total37,60 km2 (1,450 sq mi)Ketinggian362 m (1,188 ft)Populasi (2013-12-31)[1] • Total7.233 • Kepadatan1,9/km2 (5,0/sq mi)Zona waktuWET/WMPET (UTC+1/+2)Kode pos95463Kode area telepon09208Pelat kendaraanBTSitus webwww.bin...

 

 

Afghanistan läge HuvudstadKabul Största stad Kabul (4,1 miljoner invånare 2019)[1] Officiella språk dari, pashto[2] Demonym afghan[3] Statsskick Islamiska republiken Afghanistan (de jure, sedan 2004)Islamiska emiratet Afghanistan (de facto, sedan 15 augusti 2021) Självständighet från Storbritannien   -  Erkänd 19 augusti 1919  Yta  -  Totalt 652 230 km²[4] (42:a)  -  Vatten (%) försumbart Demografi  -  2019 ...

 

 

Orang VietCewek Viet memakai gaun áo dài dengan topi nón láJumlah populasi±89 jutaDaerah dengan populasi signifikan Vietnam82.085.826 (2019)[1] Amerika Serikat2.067.527 (2016)[2] Kamboja400.000-1.000.000[3][4][5] Jepang420.415 (2020)[6] Prancis~400.000[7][8] Taiwan320.000 (2019)[9] Australia>300.000 (2018)[10][11] Kanada240.514[12] Korea Selatan2...

Volcano in Peru For the mountain on the border of the Moquegua Region and the Tacna Region, Peru, see Tutupaca (Moquegua-Tacna). TutupacaTutupaca viewed from a southern direction.Highest pointElevation5,815 m (19,078 ft) Coordinates17°01′34″S 70°22′19″W / 17.026°S 70.372°W / -17.026; -70.372[1]GeographyTutupacaLocation of Tutupaca GeologyMountain typeStratovolcanoesVolcanic arcAndean Volcanic BeltLast eruption1802 Tutupaca is a v...

 

 

Inggris U-20JulukanThree LionsAsosiasiThe Football AssociationKonfederasiUEFA (Eropa)Pelatih Brian EastickKode FIFAENG Warna pertama Warna kedua Piala Dunia Wanita U-20 FIFAPenampilan8 (Pertama kali pada 1981)Hasil terbaikThird, 1993 Tim nasional sepak bola U-20 Inggris, juga disebut sebagai Inggris U-20, adalah tim yang mewakili Inggris di pada cabang olahraga sepak bola pada tingkat usia di bawah 20 tahun dan dikendalikan oleh Asosiasi Sepak Bola Inggris (FA), sebuah badan yang mengatur sep...

 

 

Medical conditionIntention tremorOther namesCerebellar tremorSpecialtyNeurology  Intention tremor is a dyskinetic disorder characterized by a broad, coarse, and low-frequency (below 5 Hz) tremor evident during deliberate and visually-guided movement (hence the name intention tremor). An intention tremor is usually perpendicular to the direction of movement. When experiencing an intention tremor, one often overshoots or undershoots one's target, a condition known as dysmetria.[1&...

Fatali Khan Isgender oglu Khoyski (bahasa Azerbaijan: Fətəli-xan İsgəndər oğlu Xoyski; Desember 1875 - September 1920) adalah seorang pengacara dan Perdana Menteri pertama Republik Demokratik Azerbaijan. Fatali Khan lahir tanggal 7 Desember 1875 di Shaki dalam keluarga Isgender Khoyski, letjen di pasukan Rusia. Ia belajar di fakultas hukum Universitas Moskow dan lulus tahun 1901. Fatali-khan Khoyski dibunuh di Tbilisi pada September 1920. Penguburannya dilaksanakan oleh konsulat Ira...

 

 

Roman-era cookbook 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: Apicius – news · newspapers · books · scholar · JSTOR (August 2020) (Learn how and when to remove this message) This article is about the Roman cookbook. For other uses, see Apicius (disambiguation). The Apicius manuscript (ca. 900 CE) of the...

 

 

Bangladeshi politician Abul Hasnat Muhammad Qamaruzzamanআবুল হাসনাত মোহাম্মদ কামারুজ্জামানMinister of IndustriesIn office25 January 1975 – 15 August 1975PresidentSheikh Mujibur RahmanPrime MinisterMuhammad Mansur AliPreceded bySyed Nazrul IslamSucceeded bySultan Mahmud5th President of Bangladesh Awami LeagueIn office18 January 1974 – 24 February 1975General SecretaryZillur RahmanPreceded bySheikh Mujibur Rahma...

Questa voce sull'argomento politici italiani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Ugo Guido Mondolfo Deputato della Repubblica ItalianaLegislaturaI GruppoparlamentareUnità Socialista-PSU-PSDI CollegioMilano Sito istituzionale Dati generaliPartito politicoPartito Socialista Democratico Italiano Titolo di studioLaurea in lettere Professioneinsegnante, pubblicista Ugo Guido Mond...

 

 

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: 2008 in piracy – news · newspapers · books · scholar · JSTOR (November 2008) (Learn how and when to remove this message) There were 49 ships reported pirate attacks in the first three months of 2008, up from 41 in that period of 2007. According to the ICC Inte...

 

 

الرماية في الألعاب الأولمبية الصيفية 2016 في الألعاب الأولمبية الصيفية تعديل مصدري - تعديل   أجريت منافسات الرماية ضمن دورة الألعاب الأولمبية الصيفية 2016 في ريو دي جانيرو في الفترة من 06-14 أغسطس في مركز الرماية الوطني في ديودورو.[1] 390 رياضي شاركوا في خمسة عشر حدث من هذه ا�...

Small cloth scented bag filled with herbs For the single-use packaging, see Packet (container). For the water container, see water sachet. For the surname, see Sachet (surname). This article may require cleanup to meet Wikipedia's quality standards. The specific problem is: There are too many references. Relevant discussion may be found on the talk page. Please help improve this article if you can. (October 2023) (Learn how and when to remove this message) A handmade sachet containing lavende...

 

 

Institution of the imperial family of the Ming and Qing dynasties Imperial Clan CourtTông Nhân phủ ấn (宗人府印), the great seal of the Nguyễn dyansty's Imperial Clan Court.Agency overviewFormed1389PrecedingOffice of the Imperial Clan (太宗正院) Imperial Clan CourtPre-MingChinese宗正寺TranscriptionsStandard MandarinHanyu PinyinZōngzhèng SìWade–GilesTsung1-cheng4 Ssu4Ming, QingChinese宗人府TranscriptionsStandard MandarinHanyu PinyinZōngrén FǔWade–GilesTsung1-jen...

 

 

PUSAT PENDIDIKAN LATIHAN KORPS BRIMOB POLRILambang Pusdik BrimobDibentuk10 Juni 1954NegaraIndonesiaCabang Kepolisian Negara Republik IndonesiaTipe unitPendidikan latihan Kejuruan Brimob PolriBagian dariLemdiklat PolriMarkas KomandoJl. Raya Watukosek Gempol, Pasuruan, Jawa TimurMotoPadma Widya CaktiBaret BIRU GELAP Situs webwww.korpsBrimob.polri.go.idTokohKapusdikKombes Pol. Heri Sulesmono, S.I.K.WakapusdikAKBP. Agung Anggoro, S.I.K., M.H. Pusat Pendidikan Korps Brimob Polri (Pusdik ...

Part of a series onHorror films History Lists By decade 1896–1959 1890s 1900s 1910s 1920s 1930s 1940s 1950s 1960s 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970s 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980s 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990s 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000s 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010s 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020s 2020 2021 2022 2023 2024 2025 By continent A...

 

 

Эта страница требует существенной переработки. Возможно, её необходимо правильно оформить, дополнить или переписать.Пояснение причин и обсуждение — на странице Википедия:К улучшению/5 декабря 2021. У этого топонима есть и другие значения, см. Санто-Томас. Санто-Томасисп....

 

 

GA&A Productions S.r.l.Company typeLimited Liability CompanyIndustryEntertainmentFounded1990; 34 years ago (1990)FounderGioia AvvantaggiatoHeadquartersRome, ItalyArea servedWorldwideKey peopleGioia Avvantaggiato, president and executive producerProductsFilmsTelevisionFactualDocumentaryWebsitegaea.it GA&A Productions S.r.l. is an Italian distribution and production film company founded in 1990 by Gioia Avantaggiato, which operates in cinema and television. During its...

  提示:此条目页的主题不是新都城、新港城或西寶城。 La Cite Noble 新寶城概要用途商場及住宅地址將軍澳坑口銀澳路1號地段將軍澳市地段第40號坐标22°18′50″N 114°15′59″E / 22.31402°N 114.26635°E / 22.31402; 114.26635前身填海地竣工日1999年5月(25年樓齡)技术细节座数6座(1-6)层数商場:2層;住宅:46-49層设计与建造开发商恆基兆業地產其他信息设施店�...

 

 

Atapuma Hurtado est un nom espagnol. Le premier nom de famille, paternel, est Atapuma ; le second, maternel, souvent omis, est Hurtado. Pour les articles homonymes, voir Atapuma. Darwin Atapumaen plein effort lors des Championnats de Colombie 2018.InformationsNom de naissance John Darwin Atapuma HurtadoSurnom El Puma de TúquerresNaissance 15 janvier 1988 (36 ans)TúquerresNationalité colombienneÉquipe actuelle Istanbul Büyükșehir Belediye Spor TürkiyeSpécialité Grimpeur, c...