Збирання сміття

Збирання сміття (англ. garbage collection) — одна з форм автоматичного керування оперативною пам'яттю комп'ютера під час виконання програм. Підпрограма — «прибиральник сміття» — вивільняє пам'ять від об'єктів, які не використовуватимуться програмою надалі[1]. Збирання сміття було винайдено Джоном Маккарті приблизно 1959 року для розробленої ним мови програмування Lisp[2].

Історія

Прибирання сміття вперше застосував Джон Маккарті 1959 року в середовищі програмування на розробленій ним функціональній мові програмування Lisp. Згодом воно застосовувалося в інших системах програмування і мовах, переважно — у функційних та логічних. Необхідність збирання сміття в мовах цих типів обумовлена ​​тим, що структура таких мов робить украй незручним відстеження часу життя об'єктів у пам'яті й ручне керування нею. У цих мовах широко використовуються списки і засновані на них складні структури даних під час роботи програм постійно створюються, надбудовуються, розширюються, копіюються, і правильно визначити момент видалення того чи іншого об'єкта важко.

У промислових процедурних і об'єктних мовах прибирання сміття довго не використовувалася. Перевага віддавалася ручному керуванню пам'яттю, як більш ефективному та передбачуваному. Але з другої половини 1980-х років технологія збирання сміття стала використовуватися і в директивних (імперативних), і в об'єктних мовах програмування, а з другої половини 1990-х років усе більше число створюваних мов і середовищ, орієнтованих на прикладне програмування, містять механізм збору сміття або як єдиний, або як один з доступних механізмів керування динамічною пам'яттю. Нині[коли?] вона використовується мовами Оберон, Java, Python, Ruby, Perl, C#, D, F# та іншими мовами.

Основний принцип, з яким працюють різні алгоритми збирання сміття, полягає в наступному:

  1. Визначити об'єкти, що не потрібні для подальшої роботи програми.
  2. Вивільнити ресурси, зайняті цими об'єктами.

Часто автоматичне збирання сміття протиставляють ручному керуванню пам'яттю, яке, на відміну від автоматичного, вимагає від розробника самому писати інструкції виділення пам'яті та її звільнення.

Проблеми ручного керування пам'яттю

Традиційним для директивних мов способом керування пам'яттю є ручний. Його сутність у такому:

  • Для створення об'єкта в динамічній пам'яті програміст явно викликає команду виділення пам'яті. Ця команда повертає вказівник на виділену ділянку пам'яті, який зберігається і використовується для доступу до неї.
  • До тих пір, поки створений об'єкт потрібен для роботи програми, програма звертається до нього через раніше збережений вказівник.
  • Коли потреба в об'єкті зникає, програміст явно викликає команду звільнення пам'яті, передаючи їй вказівник на створений об'єкт.

У будь-якій мові, що допускає створення об'єктів у динамічній пам'яті, потенційно можливі дві проблеми: завислі вказівники і витоки пам'яті .

Завислий вказівник
Завислий вказівник — це вказівник, який залишається у використанні для посилання на об'єкт, який уже видалений. Після видалення об'єкта всі збережені в програмі посилання на нього стають «завислими». Пам'ять, займана раніше об'єктом, може бути передана операційній системі і стати недоступною, або бути використана для розміщення нового об'єкта в тій самій програмі. У першому випадку спроба звернутися по «повислого» вказівника призведе до спрацьовування механізму захисту пам'яті й аварійної зупинки програми, а в другому — до непередбачуваних наслідків.
Поява завислих посилань зазвичай стає наслідком неправильної оцінки часу життя об'єкта: програміст викликає команду видалення об'єкта до того, як його використання припиниться.
Витік пам'яті
Докладніше: Витік пам'яті
Створивши об'єкт у динамічній пам'яті, програміст може не видалити його після завершення використання. Якщо на об'єкт немає посилань, він стає програмно недоступним, але продовжує займати пам'ять, оскільки команда його видалення не викликана. Ця ситуація і називається витоком пам'яті.
Якщо об'єкти, посилання на які губляться, створюються в програмі постійно, то витік пам'яті проявляється в поступовому збільшенні обсягу використовуваної пам'яті; якщо програма працює довго, обсяг використовуваної нею пам'яті постійно зростає, і через якийсь час відчутно сповільнюється робота системи (через необхідність під час будь-якого виділення пам'яті використовувати підкачування сторінок), або програма вичерпує доступний обсяг адресного простору і завершується з помилкою.

Вплив автоматичного збирання сміття на швидкодію

Дослідження впливу автоматичного збирання сміття на швидкодію програм для мов програмування, розроблених для застосування лише разом з автоматичним збиранням сміття (таких як Java, Objective Caml, Python тощо), ускладнюється браком можливості вимірювати швидкодію програми з ручним керуванням пам'яттю. Однак, у дослідженні Метью Герца та Емері Берґера[3] порівняно швидкодію ручного керування пам'яттю та прибиральників сміття (як з копіюванням, так і без копіювання). Ці вимірювання довели, що найкращий за швидкодією прибиральник сміття може конкурувати за швидкодією з ручним керуванням пам'яттю, якщо йому надати досить багато пам'яті. Зокрема, з використанням уп'ятеро більшої пам'яті його швидкодія відповідає ручному варіанту. За наявності втричі більшої вільної пам'яті він працює в середньому на 17 % повільніше за ручне керування пам'яттю. А з використанням удвічі більшої пам'яті, швидкодія зменшується на 70 %. В умовах браку фізичної пам'яті використання своп-пам'яті вповільнює швидкодію прибиральника сміття в рази порівняно з ручним керуванням.

Вимоги до мови та системи

Щоб програма могла використовувати збирання сміття, необхідно виконання низки умов, що належать до мови, середовища виконання і самої розв'язуваної задачі.

Необхідність середовища виконання зі збирача сміття
Природно, для збору сміття необхідне динамічне середовище, що підтримує виконання програми, і наявність у цьому середовищі збирача сміття.
Підтримка з боку мови програмування

Збирач сміття може нормально функціонувати тільки тоді, коли він може точно відстежити всі посилання на всі створені об'єкти. Очевидно, якщо мова допускає перетворення посилань (вказівників) в інші типи даних (цілі числа, масиви байтів і так далі) на кшталт С/C++, відстежити використання таких перетворених посилань стає неможливо, і збирання сміття стає безглуздим — вона не захищає від «завислих» вказівників і витоків пам'яті. Тому мови, орієнтовані на використання збирання сміття, зазвичай істотно обмежують свободу використання вказівників, адресної арифметики, перетворень типів вказівників до інших типів даних. У частині з них узагалі немає типу даних «вказівник», у частині він є, але не допускає ні перетворень типу, ні зміни.

Технічна допустимість короткочасних уповільнень у роботі програм
Прибирання сміття виконується періодично зазвичай у заздалегідь невідомі моменти часу. Якщо припинення роботи програми на час, порівнянний із часом збирання сміття, може призвести до критичних помилок, використовувати в подібній ситуації збирання сміття, очевидно, не можна.
Наявність деякого резерву вільної пам'яті
Чим більше пам'яті доступно середовищі виконання, тим рідше запускається збирач сміття і тим ефективніше його робота. Робота збирача сміття в системі, де кількість доступної збирачеві пам'яті наближається до пікової потреби програми, може виявитися неефективною і непродуктивною. Чим менше надлишок пам'яті, тим частіше відбувається запуск збирача і тим більше часу витрачається на його виконання. Падіння продуктивності програми в такому режимі може виявитися занадто істотним.

Див. також

  • Lisp — перша мова програмування з автоматичним збиранням сміття.
  • Simula та Smalltalk — перші об'єктно-орієнтовані мови програмування також мали автоматичне збирання сміття.
  • Java, C# — сучасні популярні мови програмування з автоматичним збиранням сміття.

Джерела

Примітки

  1. Шеховцов В. А. 10.6. Підрахунок посилань і збирання сміття. Операційні системи. BHV Publishing Group. с. 246. ISBN 9789665521570.
  2. Recursive functions of symbolic expressions and their computation by machine, Part I
  3. Matthew Hertz and Emery D. Berger. Quantifying the Performance of Garbage Collection vs. Explicit Memory Management. Архівовано з джерела 27 лютого 2012. Процитовано 4 червня 2012.

Read other articles:

The List of Vijayanagara era temples in Karnataka includes notable and historically important Hindu and Jain temples and monoliths that were built or received significant patronage by the kings and vassals of the Vijayanagara Empire during the period 1336-1646 AD. This period includes the rule of the four dynasties: the Sangama, the Saluva, the Tuluva, and the Aravidu dynasties. Common name Photo Location District Year Notes Someshwara[1] Kolar city Kolar Early 14th century According...

 

Teori hubungan internasional Realisme Realisme neoklasik Neorealisme (realisme struktural) Realisme klasik Realisme ofensif Realisme defensif Realisme liberal (Mazhab Inggris) Keunggulan relatif Keunggulan absolut Realisme strategis Liberalisme Idealisme Teori perdamaian demokratis Liberalisme republik Institusionalisme Neoliberalisme Liberalisme interdependensi Liberalisme sosiologis Liberalisme institusional Konstruktivisme Konstruktivisme modern Konstruktivisme pascamodern Konstruktivisme ...

 

العلاقات السودانية الكازاخستانية السودان كازاخستان   السودان   كازاخستان تعديل مصدري - تعديل   العلاقات السودانية الكازاخستانية هي العلاقات الثنائية التي تجمع بين السودان وكازاخستان.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية �...

Thomas Mann beralih ke sini. Untuk orang lain bernama sama silakan lihat Thomas Mann (disambiguasi) Thomas MannLahir(1875-06-06)6 Juni 1875Lübeck, JermanMeninggal12 Agustus 1955(1955-08-12) (umur 80)Zürich, SwissPekerjaanNovelis, penulis cerita pendek dan esaiKarya terkenalBuddenbrooks, The Magic Mountain, Death in VenicePenghargaanPenghargaan Nobel dalam Sastra 1929 Tanda tangan Paul Thomas Mann (lahir 6 Juni 1875 di Lübeck, meninggal 12 Agustus 1955 di Zurich) ialah penuli...

 

Latter Day Saints doctrine 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 contains too many or overly lengthy quotations. Please help summarize the quotations. Consider transferring direct quotations to Wikiquote or excerpts to Wikisource. (May 2011)This article may rely excessively on sources too closely associated with the subject, potentially preventing the article from b...

 

Cet article est une ébauche concernant une localité italienne et le Trentin-Haut-Adige. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Massimeno Administration Pays Italie Région Trentin-Haut-Adige  Province Trentin   Code postal 38086 Code ISTAT 022112 Code cadastral F045 Préfixe tel. 0465 Démographie Population 139 hab. (1er janvier 2023[1]) Densité 6,6 hab./km2 Géographie Coordonn�...

Pandemi koronavirus di MesirPeta kegubernuran dengan kasus koronavirus terkonfirmasi (merah) atau terduga (biru) (pada 25 Maret)PenyakitCOVID-19Galur virusSARS-CoV-2LokasiMesirKasus pertamaKairoTanggal kemunculan14 Februari 2020 (4 tahun dan 2 bulan)AsalWuhan, Hubei, TiongkokKasus terkonfirmasi44598[1]Kasus sembuh32476[1]Kematian3Wilayah terdampak24 Kegubernuran [2] Pandemi koronavirus di Mesir adalah bagian dari pandemi koronavirus di seluruh dunia. Kasus pe...

 

† Египтопитек Реконструкция внешнего вида египтопитека Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:Четвероно...

 

City in Ontario, Canada For the township in Northumberland County, see Hamilton Township, Ontario. City in Ontario, CanadaHamiltonCity (single-tier)City of HamiltonFrom top, left to right: Downtown Hamilton from Sam Lawrence Park, Hamilton City Hall, Bayfront Park Harbour Front Trail, Dundurn Castle, Historic Art Deco and Gothic Revival Pigott Building complex, Webster's Falls FlagCoat of armsLogoNicknames: The Ambitious City, The Electric City, The Hammer, Steeltown[1][2]...

Wikipedia tiếng Việt hoàn toàn không chịu trách nhiệm về nội dung của những bài viết về luật pháp được đăng tải. Bài viết này chỉ nhằm vào mục đích cung cấp kiến thức phổ thông và không phải là tư vấn pháp luật. Một phần của loạt bài về Chính trịBầu cử Cơ bản Bầu cử đặc biệt Công ty Trực tiếp / Gián tiếp Định kỳ Tổng tuyển cử Địa phương Giữa kỳ Đa số Sơ bộ Tỷ ...

 

قناطر إسنامعلومات عامةنوع المبنى هيكل معماري سد ( – عقد 1990) البلد  مصر معلومات أخرىالإحداثيات 25°18′26″N 32°33′28″E / 25.307361°N 32.557861°E / 25.307361; 32.557861 تعديل - تعديل مصدري - تعديل ويكي بيانات 25°18′26″N 32°33′28″E / 25.30736111°N 32.55786111°E / 25.30736111; 32.55786111 عدلي يكن باشا يت...

 

Cet article concerne le rite et le mobilier chrétien. Pour la vasque sanitaire, voir Lavabo. Lavabo gothique en niche du XVe siècle. Un lavabo est une vasque permettant le lavage rituel des mains dans le monde chrétien. Ce mot est issu du latin, lavabo étant la première personne du singulier du verbe latin lavare (laver) au futur de l'indicatif. Il est employé à l'origine, et encore maintenant, dans la liturgie chrétienne, pour désigner le moment de la messe où le prêtre ...

ToscaLocandina di Tosca (Adolf Hohenstein, 1899)MusicaGiacomo Puccini(Spartito online) LibrettoGiuseppe GiacosaLuigi Illica(Libretto online) Fonti letterarieLa Toscadi Victorien Sardou Attitre Epoca di composizioneprimavera 1896 - ottobre 1899 Prima rappr.14 gennaio 1900 TeatroRoma, Teatro Costanzi Personaggi Floria Tosca, celebre cantante (soprano lirico spinto) Mario Cavaradossi, pittore (tenore lirico spinto) Il barone Vitellio Scarpia, capo della polizia (baritono drammatico) Cesare Angel...

 

36°08′31″N 5°21′12″W / 36.141909°N 5.353397°W / 36.141909; -5.353397 Royal Gibraltar Post OfficeIndustryPostal serviceFounded1886HeadquartersMain Street, GibraltarArea servedGibraltarKey peopleGlendon Martinez – CEO Sabina Pitaluga – HEO Nanette Enriles – Accounts Manager Paul Acolina – Mail Centre ManagerOwnerGovernment of GibraltarWebsitepost.gi The Royal Gibraltar Post Office is the postal services in the British overseas territory of Gibraltar....

 

1992 studio album by Tori AmosLittle EarthquakesStudio album by Tori AmosReleasedJanuary 6, 1992Recorded1990–1991Length57:11LabelAtlantic (US)East West (Europe)ProducerTori AmosEric RosseDavitt SigersonIan StanleyTori Amos chronology Y Kant Tori Read(1988) Little Earthquakes(1992) Under the Pink(1994) Singles from Little Earthquakes Me and a GunReleased: October 21, 1991 Silent All These YearsReleased: November 18, 1991 ChinaReleased: January 20, 1992 WinterReleased: March 9, 1992 ...

宇都宮文星短期大学 大学設置/創立 1989年学校種別 私立設置者 学校法人宇都宮学園本部所在地 栃木県宇都宮市上戸祭4-8-15北緯36度35分55.31秒 東経139度51分31.96秒 / 北緯36.5986972度 東経139.8588778度 / 36.5986972; 139.8588778座標: 北緯36度35分55.31秒 東経139度51分31.96秒 / 北緯36.5986972度 東経139.8588778度 / 36.5986972; 139.8588778学部 地域総合文化学科ウェブ...

 

  لمعانٍ أخرى، طالع بيركلي (توضيح). بيركلي   الإحداثيات 41°56′46″N 94°06′50″W / 41.946111111111°N 94.113888888889°W / 41.946111111111; -94.113888888889   [1] تقسيم إداري  البلد الولايات المتحدة[2]  خصائص جغرافية  المساحة 0.52058 كيلومتر مربع0.536288 كيلومتر مربع (1 أبريل 2010)  ارتف...

 

American political scientist Lisa Wedeen Lisa Wedeen is Professor of Political Science and the College and Co-Director of the Chicago Center for Contemporary Theory at the University of Chicago. In 1995, Wedeen received her Ph.D. in political science at the University of California, Berkeley.[1] Her former advisor is Hanna Pitkin.[2] She has taught courses on nationalism, identity formation, power and resistance, and citizenship. Her work on the Middle East includes Ambiguitie...

Questa voce o sezione sull'argomento poeti italiani non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Stemma della famiglia AllegrettiBlasonaturacuore d'oro su campo azzurro Giacomo (o Jacopo) Allegretti (Forlì, prima del 1326 – Rimini, 1393) è stato un poeta, filosofo, medico e astrologo italiano, è n...

 

Từ bên trái, theo chiều kim đồng hồ: Các cuộc biểu tình ở Hồng Kông 2019–2020 đã biến thành bạo loạn lan rộng và bất tuân dân sự; Hạ viện Hoa Kỳ bỏ phiếu thông qua các bài báo để luận tội Donald Trump; chỉnh sửa gen CRISPR lần đầu tiên được sử dụng để điều trị thử nghiệm cho một số bệnh nhân mắc chứng rối loạn di truyền; Ngọn lửa thiêu rụi ngọn tháp và mái nhà của Nhà ...