Bölge tabanlı bellek yönetimi
Bölge tabanlı bellek yönetimi, bilgisayar biliminde, tahsis edilen her nesnenin belirli bir bölgeye (bölüm, alt havuz, zona, arena, alan veya bellek bağlamı olarak da adlandırılır) atandığı bir bellek yönetim türüdür. Bir bölge, topluca verimli bir şekilde yeniden tahsis edilebilen veya serbest bırakılabilen, önceden ayrılmış nesnelerden oluşan bir koleksiyondur.
Bölge tabanlı yönetim kullanan bellek ayırıcıları genellikle alan ayırıcıları (region allocators) olarak adlandırılır. Eğer bu ayırıcılar yalnızca tek bir işaretçinin artırılmasıyla çalışıyorsa, bu durumda artırıcı ayırıcılar (bump allocators) olarak tanımlanırlar.
Yığın (stack) tahsisine benzer şekilde, bölge tabanlı yönetim de düşük işletim yüküyle bellek tahsisi ve serbest bırakma işlemlerini mümkün kılar. Ancak bölgeler, daha fazla esneklik sunarak nesnelerin tahsis edildikleri yığın çerçevesinden daha uzun süre yaşamalarına olanak tanır. Tipik bir uygulamada, bir bölgedeki tüm nesneler genellikle tek bir bitişik bellek adresi aralığında tahsis edilir.
Özellikle OS/360 ve onu takip eden sistemlerde, bölge tabanlı bellek yönetimi iki düzeyde uygulanır. Her işlem, bitişik bir bölüm veya bölge içinde yürütülür. Bellek tahsis talepleri bir alt havuz (subpool) üzerinden gerçekleştirilir ve tüm bir alt havuz topluca serbest bırakılabilir. Alt havuzlar için bellek, genellikle bitişik olmayan ancak 2 KiB veya 4 KiB’nin katları şeklindeki bloklar hâlinde ayrılır.
Örnek
[değiştir | kaynağı değiştir]Basit bir örnek olarak, bir bağlı liste veri yapısını tahsis eden ve ardından tahsisatını kaldıran aşağıdaki C koduna göz atabilirsiniz:
Bolge *b = bolgeOlustur(); // Bölge oluştur
ListeDugum *bas = NULL;
for (int i = 1; i <= 1000; i++) {
ListeDugum* yeniDugum = bolgedenAlanAl(b, sizeof(ListeDugum));
yeniDugum->sonraki = bas;
bas = yeniDugum;
}
// ...
// (burada listeyi kullan)
// ...
bolgeYokEt(b); // Bölgeyi yok et
Bağlı liste oluşturmak için birçok işlem gerekse de, düğümlerin tahsis edildiği bölgeyi yok ederek tek bir işlemle hızlıca tahsisi kaldırılabilir. Listeyi taramaya gerek yoktur.
Uygulama
[değiştir | kaynağı değiştir]Basit açık bölgeler uygulaması kolaydır; aşağıdaki açıklama Hanson’ın çalışmasına dayanmaktadır.[1] Her bölge, büyük bellek bloklarından oluşan bir bağlı liste olarak uygulanır; her blok, çok sayıda tahsise hizmet verebilecek kadar büyük olmalıdır. Mevcut blok, bloktaki bir sonraki serbest konuma işaret eden bir işaretçi tutar ve blok dolduğunda yeni bir blok tahsis edilerek listeye eklenir. Bölge serbest bırakıldığında, bir sonraki serbest konum işaretçisi ilk bloğun başına sıfırlanır ve blok listesi, bir sonraki tahsis edilen bölge için yeniden kullanılabilir. Alternatif olarak, bir bölge serbest bırakıldığında, blok listesi, diğer bölgelerin daha sonra yeni bloklar tahsis edebileceği küresel bir serbest listeye eklenebilir. Bu basit şemanın her iki durumunda da, bölgelerdeki tek tek nesneleri serbest bırakmak mümkün değildir.
Bu şemanın tahsis edilen bayt başına toplam maliyeti çok düşüktür; neredeyse tüm tahsisler yalnızca bir karşılaştırma ve bir sonraki serbest konum işaretçisinin güncellenmesini içerir. Bir bölgenin serbest bırakılması sabit zamanlı bir işlemdir ve nadiren yapılır. Tipik çöp toplama sistemlerinden farklı olarak, verilerin türüyle etiketlenmesine gerek yoktur.
Tarih ve kavramlar
[değiştir | kaynağı değiştir]Bölgelerin temel kavramı çok eskidir ve ilk olarak 1967 yılında Douglas T. Ross’un AED Serbest Depolama Paketi’nde ortaya çıkmıştır; bu pakette bellek, her biri kendi tahsis edicisine sahip olan ve bir kerede tamamen serbest bırakılabilen, bölgeler olarak kullanılabilen bir bölgeler hiyerarşisine bölünmüştü[2]. 1976 yılında , PL/I standardı ALAN veri türünü içermiştir[3]. 1990 yılında Hanson, C dilinde açık bölgelerin (ki bunlara arena adını vermiştir) tahsis edilen bayt başına zaman performansında, bilinen en hızlı yığıt tahsis mekanizmasından bile üstün olabileceğini göstermiştir[1]. Açık bölgeler, Apache HTTP Sunucusu (bunlara havuzlar adını verir) ve PostgreSQL veritabanı yönetim sistemi (bunlara bellek bağlamları adını verir) gibi bazı erken C tabanlı yazılım projelerinin tasarımında önemli bir rol oynamıştır[4]. Geleneksel yığıt tahsisine benzer şekilde, bu şemalar bellek güvenliği sağlamaz; bir programcının, serbest bırakılmış bir bölgeye sarkan işaretçi yoluyla erişmesi veya bir bölgeyi serbest bırakmayı unutması, bellek sızıntısına neden olabilir.
Bölge çıkarımları
[değiştir | kaynağı değiştir]1988 yılında, araştırmacılar güvenli bellek tahsisi sağlamak amacıyla bölgelerin kullanımına ilişkin yöntemleri araştırmaya başlayarak bölge çıkarımı (region inference) kavramını ortaya koymuşlardır. Bu yöntem, bölgelerin oluşturulması ve serbest bırakılması işlemleri ile statik bellek tahsis ifadelerinin belirli bölgelere atanmasının derleme zamanında derleyici tarafından otomatik olarak gerçekleştirilmesini içerir. Derleyici, bu işlemleri sarkan işaretçiler (dangling pointers) veya bellek sızıntıları (memory leaks) oluşmayacak şekilde garanti altına alacak biçimde yürütür.
Bu alandaki erken çalışmalardan biri Ruggieri ve Murtagh tarafından gerçekleştirilmiştir[5]. Bu çalışmada, her fonksiyonun başında bir bölge oluşturulmakta ve fonksiyonun sonunda bu bölge serbest bırakılmaktadır. Her bir statik tahsis ifadesi için ömür (lifetime) analizini belirlemek amacıyla veri akış analizi (data-flow analysis) kullanılmış; ardından, bu ifadeler ömürlerini kapsayan en kısa ömürlü bölgeye atanmıştır.
1994 yılında, bu yaklaşım Tofte ve Talpin tarafından önemli ölçüde genişletilmiştir. Çalışmaları, tip çıkarımı (type inference), polimorfik bölge tipleri ve bölge hesabı (region calculus) gibi kavramlara dayanan alternatif bir algoritmayı temel alarak, işlevsel bir programlama dili olan Standard ML’de tip polimorfizmi ve yüksek dereceli fonksiyonlar (higher-order functions) ile birlikte kullanılabilecek şekilde genelleştirilmiştir[6][7]. Bu öncü çalışmada, bölgeleri içeren lambda hesabı (lambda calculus) uzantısına dayalı bir sistem tanıtılmış ve iki temel yapı eklenmiştir:
ρ'de e1: e1 ifadesinin sonucunu hesaplayın ve ρ bölgesinde saklayın; e2 end içinde ρ bölgesine izin ver: Bir bölge oluşturun ve ρ'ye bağlayın; e2'yi değerlendirin; ardından bölgeyi ayırın.
Bu sözdizimsel yapı nedeniyle bölgeler iç içe geçmiştir, yani r 2, r 1'den sonra oluşturulursa, r 1'den önce de ayrılması gerekir; Sonuç bir bölge yığınıdır. Dahası, bölgeler oluşturuldukları aynı işlev içinde ayrılmalıdır. Bu kısıtlamalar Aiken ve diğerleri tarafından gevşetilmiştir[8].
Bu genişletilmiş lambda hesaplaması, Standard ML programlarını makine koduna derlemek için kanıtlanabilir şekilde bellek güvenliğine sahip bir ara gösterim olarak hizmet vermesi amacıyla tasarlanmıştır. Ancak, büyük programlarda iyi sonuçlar üretecek bir çevirici (translator) geliştirmek, özyineli (recursive) çağrılar, kuyruk çağrıları (tail calls) ile yalnızca tek bir değer içeren bölgelerin ortadan kaldırılması gibi çeşitli pratik sınırlamaları çözmeyi gerektiren yeni analizlerin uygulanmasını zorunlu kılmıştır.. Bu çalışma 1995 yılında tamamlandı [9] ve ml'nin çöp toplama yerine bölge tahsisine dayalı bir versiyonu olan ML Kitine entegre edildi. Bu, orta ölçekli test programlarında ikisi arasında doğrudan bir karşılaştırmaya izin vererek, programın ne kadar "bölge dostu" olduğuna bağlı olarak çok çeşitli sonuçlar verdi ("10 kat daha hızlı ve dört kat daha yavaş"); Ancak derleme süreleri dakika sırasına göre idi.[10] ML Kiti sonunda iki eklemeyle büyük uygulamalara ölçeklendirildi: modüllerin ayrı derlenmesi için bir şema ve bölge çıkarımını çöp toplama izlemeyle birleştiren hibrit bir teknik[11][12].
Yeni dil ortamlarına genelleştirme
[değiştir | kaynağı değiştir]ML Kit'in geliştirilmesini takiben, bölgeler diğer dil ortamlarına da genellenmeye başlanmıştır.
- C programlama dilinin çeşitli uzantıları:
- Pek çok özelliğinin yanı sıra açık bellek bölgeleri (explicit regions) desteği de sunan güvenli C diyalekti Cyclone, mevcut C uygulamalarının bu sisteme geçirilmesinin etkilerini değerlendirmektedir[13][14][15].
- RC adlı, C diline getirilen bir uzantı [16] , açıkça yönetilen bellek bölgelerini kullanmakta; ancak, hiçbir bölgenin erken serbest bırakılmadığından emin olmak amacıyla bu bölgeler üzerinde başvuru sayımı (reference counting) da uygulayarak bellek güvenliğini garanti altına almaktadır.[17][18] Bölgeler, iç referansların değiştirilmesi durumunda başvuru sayaçlarının güncellenmesini gerektirmediğinden, başvuru sayımının getirdiği ek yükü azaltır. RC, bazı başvuru sayımı güncellemelerinin ortadan kaldırılmasına olanak tanıyan, bölgelere yönelik açık bir statik tür sistemi de içermektedir.[19]
- C dilinin bir kısıtlaması olan Control-C ise, programların sadece bellek bölgelerini (ve aynı anda yalnızca tek bir bölgeyi) kullanmasına izin vererek, bellek güvenliğini statik olarak sağlamayı amaçlayan bir tasarıma sahiptir.[20]
- Bölgeler, Java'nın bir alt kümesi için uygulandı,[21] ve Gerçek zamanlı Java'da bellek yönetiminin kritik bir bileşeni haline geldi; bu, nesne kapsüllemesini göstermek ve bölge tahsisinde çalışma zamanı kontrollerini ortadan kaldırmak için bunları sahiplik türleriyle birleştirdi.[22][23][24] Daha yakın zamanlarda, gömülü gerçek zamanlı Java uygulamalarındaki bölgeleri çıkarmak için derleme zamanı statik analizini, çalışma zamanı bölgesi ayırma ilkesini ve programcı ipuçlarını birleştiren yarı otomatik bir sistem önerildi.[25][26] Bölgeler, zaman yüklerinin statik olarak öngörülebilir olması nedeniyle gerçek zamanlı bilgi işlem için uygundur ve artımlı bellek toplayıcılarının karmaşıklığına gerek kalmaz.gerek kalmaz.
- Java 21, bellek alanlarını ayırmak ve serbest bırakmak için bir Java API'si ekledi.[27] Bu API'nin belirtilen amacı, yerel kütüphanelerle güvenli entegrasyonu iyileştirerek JVM bellek sızıntılarını önlemek ve yerel kodun JVM bellek bozulması riskini azaltmaktır.[28]
- Prolog [29][30] ve Mercury[31][32] gibi mantık programlama dilleri için, Tofte ve Talpin'in bölge çıkarım modelini geri izleme ve kesmeleri destekleyecek şekilde genişleterek uygulanmışlardır.
- Bölge tabanlı depolama yönetimi, paralel programlama dili ParaSail [33] boyunca kullanılır. ParaSail'de açık işaretçiler bulunmadığından, referans sayımına gerek yoktur.
Dezavantajlar (Eksiklikler)
[değiştir | kaynağı değiştir]Bölgeleri kullanan sistemler, bölgeler serbest bırakılmadan önce çok büyüdüğünde ve büyük oranda ölü veri içerdiğinde sorunlarla karşılaşabilir; bunlar genellikle "sızıntı" olarak adlandırılır (her ne kadar sonunda serbest bırakılsalar da). Sızıntıları ortadan kaldırmak, genellikle yeni ve daha kısa ömürlü bölgeler oluşturarak programı yeniden yapılandırmayı gerektirebilir. Bu tür sorunların hata ayıklaması, özellikle bölge çıkarımı kullanan sistemlerde zordur; çünkü programcı, temel çıkarım algoritmasını anlamalı veya sorunu teşhis etmek için ayrıntılı ara temsili incelemelidir. İzleme tabanlı çöp toplayıcılar, bu tür verileri program değişikliği gerektirmeden daha zamanında serbest bırakmada daha etkilidir; bu, hibrit bölge/çöp toplama sistemlerinin bir gerekçesiydi.[11] Öte yandan, izleme tabanlı bellek toplayıcılar da, bir daha asla kullanılmayacak verilere referanslar tutulduğunda ince sızıntılar gösterebilir.
Bölge tabanlı bellek yönetimi, bölge sayısı nispeten az olduğunda ve her bölge çok sayıda nesne içerdiğinde en iyi şekilde çalışır; çok sayıda seyrek bölge içeren programlar, iç parçalanmaya yol açarak bellek israfına ve bölge yönetimi için zaman yüküne neden olur. Yine, bölge çıkarımı varlığında bu sorunun teşhisi daha zor olabilir.
Hibrit yöntemler
[değiştir | kaynağı değiştir]Yukarıda belirtildiği üzere, RC (Referans Sayımı), bölgeler ve referans sayımının bir hibritini kullanır; bu, bölgeler içindeki referanslar değiştirildiğinde sayımların güncellenmesini gerektirmediği için referans sayımının yükünü sınırlar. Benzer şekilde, bazı işaret-bölge hibrit yöntemleri, izleme tabanlı bellek toplayıcılarını bölgelerle birleştirir; bunlar, yığını bölgelere ayırarak çalışır, canlı nesneler içeren bölgeleri işaretleyen bir işaret-temizleme geçişi gerçekleştirir ve ardından işaretlenmemiş bölgeleri serbest bırakır. Bunların etkili kalabilmesi için sürekli birleştirme (defragmentation) gerektirir..[34]
Kaynakça
[değiştir | kaynağı değiştir]- ^ a b Hanson, David R. (1989). "Fast allocation and deallocation of memory based on object lifetimes". Software: Practice and Experience. 20 (1): 5-12. doi:10.1002/spe.4380200104. 20 Ekim 2012 tarihinde kaynağından arşivlendi.
- ^ Ross, Douglas (1967). "The AED free storage package". Communications of the ACM. 10 (8): 481–492. doi:10.1145/363534.363546. S2CID 6572689.
- ^ American National Standards Institute, inc. (1976). American National Standard Programming Language PL/I.
- ^ 2010 PostgreSQL Global Development Group (1996). "Section 41.3: Memory Management". PostgreSQL 8.2.15 Documentation. 12 Şubat 2010 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Şubat 2010.
- ^ Ruggieri, Cristina; Murtagh, Thomas P. (1988). "Lifetime analysis of dynamically allocated objects". POPL '88: Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM.
- ^ Tofte, Mads; Jean-Pierre Talpin (1993). A Theory of Stack Allocation in Polymorphically Typed Languages. Department of Computer Science, Copenhagen University. 93/15. On Citeseer 21 Haziran 2007 tarihinde Archive.is sitesinde arşivlendi
- ^ Tofte, Mads; Talpin, Jean-Pierre (1994). "Implementation of the Typed Call-by-Value λ-calculus using a Stack of Regions". POPL '94: Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. pp. 188–201. doi:10.1145/174675.177855. 7 Ağustos 2024 tarihinde Wayback Machine sitesinde arşivlendi. ISBN 0-89791-636-0. Retrieved 15 April 2014.
- ^ Aiken, Alex; Manuel Fähndrich, Raph Levien (1995). Better Static Memory Management: Improving Region-Based Analysis of Higher-Order Languages. EECS Department, University of California, Berkeley. On Citeseer 21 Haziran 2007 tarihinde Archive.is sitesinde arşivlendi
- ^ Birkedal, Lars; Tofte, Mads; Vejlstrup, Magnus (1996). "From region inference to von Neumann machines via region representation inference" 4 Nisan 2022 tarihinde Wayback Machine sitesinde arşivlendi.. POPL '96: Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. pp. 171–183. doi:10.1145/237721.237771 4 Nisan 2022 tarihinde Wayback Machine sitesinde arşivlendi.. ISBN 0-89791-769-3. Retrieved 22 February 2010.
- ^ Tofte, Mads; Birkedal, Lars; Elsman, Martin; Hallenberg, Niels (2004). "A Retrospective on Region-Based Memory Management". Higher Order Symbolic Computing. 17 (3): 245–265. doi:10.1023/B:LISP.0000029446.78563.a4. ISSN 1388-3690.
- ^ a b Hallenberg, Niels; Elsman, Martin; Tofte, Mads (2003). "Combining region inference and garbage collection". SIGPLAN Notices. 37 (5): 141–152. doi:10.1145/543552.512547. ISSN 0362-1340.
- ^ Elsman, Martin (2003). "Garbage collection safety for region-based memory management". SIGPLAN Notices. 38 (3): 123–134. doi:10.1145/640136.604190. ISSN 0362-1340.
- ^ "Cyclone: Introduction to Regions". Cyclone User Manual. 21 Ağustos 2010 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Şubat 2010.
- ^ Grossman, Dan; Morrisett, Greg; Jim, Trevor; Hicks, Michael; Wang, Yanling (2002). "Region-based memory management in cyclone". SIGPLAN Notices. 37 (5): 282–293. doi:10.1145/543552.512563.
- ^ Hicks, Michael; Morrisett, Greg; Grossman, Dan (2004). "Experience with safe manual memory-management in cyclone". ISMM '04: Proceedings of the 4th international symposium on Memory management. New York, NY, USA: ACM. ss. 73–84. doi:10.1145/1029873.1029883. ISBN 1-58113-945-4. Erişim tarihi: 22 Şubat 2010.
- ^ Gay, David (1999). "RC - Safe, region-based memory-management for C". David Gay's homepage. Intel Labs Berkeley. 26 Şubat 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Şubat 2010.
- ^ Gay, David; Aiken, Alex (1998). "Memory management with explicit regions". PLDI '98: Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation. New York, NY, USA: ACM. ss. 313–323. doi:10.1145/277650.277748. ISBN 0-89791-987-4. Erişim tarihi: 22 Şubat 2010.
- ^ Memory management with explicit regions (PDF) (PhD in Computer Science tez). University of California at Berkeley. 2001. 7 Eylül 2019 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 20 Şubat 2010.
- ^ Gay, David; Aiken, Alex (2001). "Language support for regions". SIGPLAN Notices. 36 (5): 70–80. doi:10.1145/381694.378815. ISSN 0362-1340.
- ^ Kowshik, Sumant; Dhurjati, Dinakar; Adve, Vikram (2002). "Ensuring code safety without runtime checks for real-time control systems". CASES '02: Proceedings of the 2002 international conference on Compilers, architecture, and synthesis for embedded systems. New York, NY, USA: ACM. ss. 288–297. doi:10.1145/581630.581678. ISBN 1-58113-575-0. Erişim tarihi: 22 Şubat 2010.
- ^ Region-based memory management in Java (Masters in Computer Science tez). Department of Computer Science (DIKU), University of Copenhagen. 1998. Erişim tarihi: 20 Şubat 2010.[ölü/kırık bağlantı]
- ^ Beebee, William S.; Rinard, Martin C. (2001). "An Implementation of Scoped Memory for Real-Time Java". EMSOFT '01: Proceedings of the First International Workshop on Embedded Software. London, UK: Springer-Verlag. ss. 289–305. ISBN 3-540-42673-6. Erişim tarihi: 22 Şubat 2010.
- ^ Sălcianu, Alexandru; Chandrasekhar Boyapati, William Beebee, Jr., Martin Rinard (2003). A type system for safe region-based memory management in Real-Time Java (PDF). MIT Laboratory for Computer Science. 28 Eylül 2021 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 8 Mayıs 2025.
- ^ Boyapati, Chandrasekhar; Salcianu, Alexandru; Beebee, William Jr. (2003). "Ownership types for safe region-based memory management in real-time Java". PLDI '03: Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation. New York, NY, USA: ACM. ss. 324–337. doi:10.1145/781131.781168. ISBN 1-58113-662-5. Erişim tarihi: 22 Şubat 2010.
- ^ Nahkli, Chaker; Rippert, Christophe; Salagnac, Guillaume; Yovine, Sergio (2007). "Efficient region-based memory management for resource-limited real-time embedded systems" (PDF). Proceedings of "Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS'2006)". 26 Şubat 2012 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 22 Şubat 2010.
- ^ Salagnac, Guillaume; Rippert, Christophe (2007). "Semi-Automatic Region-Based Memory Management for Real-Time Java Embedded Systems". RTCSA '07: Proceedings of the 13th IEEE International Conference on Embedded and Real-Time Computing Systems and Applications. Washington, DC, USA: IEEE Computer Society. ss. 73–80. doi:10.1109/RTCSA.2007.67. ISBN 978-0-7695-2975-2.
- ^ "Memory Segments and Arenas". Oracle. 31 Ocak 2024 tarihinde kaynağından arşivlendi.
- ^ Cimadamore, Maurizio. "JEP 454: Foreign Function & Memory API". OpenJDK. 15 Mayıs 2025 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2025.
- ^ Region-based memory management in Prolog (PDF) (Masters in Computer Science tez). University of Copenhagen, Denmark. 2000. 5 Haziran 2011 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 20 Şubat 2010.
- ^ Makholm, Henning (2000). "A region-based memory manager for prolog". ISMM '00: Proceedings of the 2nd international symposium on Memory management. New York, NY, USA: ACM. ss. 25–34. doi:10.1145/362422.362434. ISBN 1-58113-263-8. Erişim tarihi: 22 Şubat 2010.
- ^ Phan, Quan; Janssens, Gerda (2007). Logic Programming. Lecture Notes in Computer Science. 4670/2007. Springer Berlin / Heidelberg. ss. 317–332. doi:10.1007/978-3-540-74610-2. ISBN 978-3-540-74608-9. ISSN 1611-3349.
- ^ Phan, Quan; Somogyi, Zoltan (2008). "Runtime support for region-based memory management in Mercury". ISMM '08: Proceedings of the 7th international symposium on Memory management. New York, NY, USA: ACM. ss. 61–70. doi:10.1145/1375634.1375644. ISBN 978-1-60558-134-7. 1 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Nisan 2014.
- ^ Taft, Tucker (2012). "A Pointer-Free path to Object Oriented Parallel Programming". ParaSail blog. 13 Ağustos 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Eylül 2012.
- ^ Blackburn, Stephen M.; McKinley, Kathryn S. (2008). "Immix: a mark-region garbage collector with space efficiency, fast collection, and mutator performance". PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation. New York, NY, USA: ACM: 22-32. doi:10.1145/1375581.1375586. ISBN 978-1-59593-860-2.