Garbage Collector

Roskienkeruu eli Garbage Collection, roskienkerääjä-mekanismi löytyy jo 2021 vuonna käsittääkseni kaikista moderneista korkean tason ohjelmointikielistä (High-level programming language).

Toimintaperiaate

Garbage Collector -mekanismi toimi siten, että ohjelman ajon aikana se on aktiivisena käynnissä, ja delegoi tehtäviä ja muistia resurssoiden sitä siten, että poistaa muistista sellaisia olioviittauksia, tai muuttujien tilaa vieviä elementtejä, joihin ei muistissa enää ole viittausta. Näin ollen varsinaisen ohjelman ajo saa enemmän resursseja käyttöönsä.

Esimerkiksi Java-ohjelmointikielessä, joka omaa Java Virtuaalikoneen (JVM, Java Virtual Machine) omaa sisäänrakennetun GC-mekanismin.

Kielissä, kuten C ja C++ muistin hallinta on ohjelmoijan vastuulla, ja tästä syystä monet C tai C++ -ohjelmointikielillä ohjelmoidut ohjelmat myös ovat epävakaita ja ne saattavat kaatua aika ajoin, kun ohjelmoija ei ole ollut huolellinen.

Sananen moniajosta

(Tosin ei juuri liity Roskien keruuseen, mutta moniajoisuuteen kyllä, joka osittain mahdollistaa roskien keruuprosessin)

Tosin MS Dos ja Windows 3.11-95 -maailmassa ja erityisesti Ms Dos vielä 6.2 versiossa, joka on ensimmäinen kokemukseni omasta pc-tietokoneestani Dos -käyttöjärjestelmästä vuodelta 1995 lapsuudestani, johtui järjestelmän kaatuminen usein siitä, että järjestelmä ei ollut moniajojärjestelmä aidosti. Tai jokin Windowsin Blue Screen oli yleinen vitsi vielä Windows 95-aikoihin. Vielä tosin vuonna 1997 oli Turun Suomalaisessa Yhteiskoulussa ATK-luokassa käyttöjärjestelmä Ms DOS 5.0 ja osassa tietokoneista vielä CP/M.

Kun käyttäjä tai jokin toinen tietokone, tai ohjelma käynnistää jonkin prosessin ajoon, ja jos DOS-koneella oli jo ajossa jokin prosessi, usein järjestelmä kaatui. Nykyisin valta-osassa tietokoneista käytössä oleva Windows 10 sentään on moniajojärjestelmä, mutta Linux oli ennen Windowsia käsittääkseni aidosti moniajojärjestelmä. Moniajoisuushan perustuu siihen, että järjestelmä ei lukkiudu, jos käyttäjä on se sitten ihminen tai tietokone, tai jokin muu sovellus pistää uuden prosessin ajoon jo toisen ollen ajossa. 1970-vuonna julkaistu UNIX-käyttöjärjestelmäkin oli aidosti moniajojärjestelmä, mutta käytännössä koti -PC -harrastajien ulottumattomissa hyvin pitkälti hintansa tähden, koska se oli mittavan kallis järjestelmä hankkia. (UNIX-järjestelmään investointi oli yritykselle helposti yli 100 000 $ menoerä! (Suomen markoissa jotain 500 000 markkaa arvioisin eurokurssin pohjalta, siis tähän hintaan ei ole laskettu inflaatiota, deflaatiota, tai markan arvon vaihtelua muutoinkaan.)

Lisämateriaalia ja huomautus

Vaikka C ja C++ kielissä ei olekaan sisäänrakennettua roskienkeruu -mekanismia standardina, niihin on saatavilla käsittääkseni ulkoisia kirjastoja, joiden avulla sen saa käyttöön. En tiedä, enkä ole ottanut selvää kuinka laajasti ne on käytössä. Itse ohjelmoimaan oppimisen kannalta ei ole järkeä käyttää niitä opiskeluvaiheessa kuitenkaan, jos haluaa tulla hyväksi C tai C++ -ohjelmoijaksi. Teollisuudessa ohjelmointi on eri asia.

Vielä nippelitieto C++-kielestä ja COBOL:ista.

Linux Hater’s Handbookkirjassa todetaan eräässä luvun otsikossa, että C++ on 1990-vuosikymmenen COBOL. Tiedä siitä sitten, kun en ole koskaan ollut tekemisissä COBOL-koodin kanssa, mutta C++ -kielen moniperinnöllisyys-mekanismi on vähintäänkin sekava verraten esimerkiksi Java-kieleen, joka ei omaa moniperintä-mekanismia, vaan Java omaa yksiperinnöllisyys-mekanismin.

COBOL-ohjelmia vielä on ajossa 2021 -vuonnakin joissain kriittisissä järjestelmeissä, ja näin ollen vielä vuonna 2021 COBOL-osaajilla on työllistyminen luulisi hyvällä mallilla, vaikka TE-keskuksen avoimissa työpaikkailmoituksissa ei enää ole pitkään aikaan näkynytkään COBOL-osaajille työpaikkailmoituksia. Siitä huolimatta, että COBOL-ohjelmointikieli on 1970-vuosikymmenlukua. COBOL-ohjelmia on ajossa joissain kriittisissä järjestelmissä yhä 2021 esimerkiksi rahoituslaitoksissa, kansan kielellä pankeissa.

Linkkivinkki – lisätietoa Garbage Collector -mekanismista.