Kuka kerää roskasi?

Jep, tämä ei ole menneen Vihreä IT- trendin artikkeli, vaan sanoilla leikittelyä jälleen kerran. Java- koodaajat tietävät mitä tarkoittaa automaattinen roskienkeruu, garbage collection. Se tarkoittaa että koodaaja ei erityisesti varaa eikä vapauta muistia vaan käyttää olioita, ja ympäröivä virtuaalikone/framework hoitaa tämän perusaskaren. Tämä taas johtaa helpompaan koodiin ja parempaan toimintavarmuuteen – noin keskiverrosti. Java-kielen ja -alustan keskeinen piirre on ollut automaattinen roskankeruu.

Monet koodaajat eivät kuitenkaan pohdi roskankeruun toimintaa sen enempää. Meidän optimointikursseillamme opetetaan sen syvempää ymmärrystä, seurantaa ja analysointia, ja myös sen perusteella millainen koodi on tehokasta ja millainen ei. Tyypillinen roskankeruualgoritmi nimittäin tekee ’stop the world’-paussin ja pysäyttää koodin aina roskia kerättäessä. Jos roskia syntyy paljon, pausseja on siis paljon ja ne ovat pidempiä. Pahimmillaan huono sovellus voi käyttää suurimman osan aikaa roskankeruussa, ja vain murto-osan koodia ajaessa.

Roskankeruuhun liittyy paljon säätöjä ja mitättömin niistä ei ole roskankeruualgoritmin valinta. Vaihtoehtoja on monia, ja hyvä algoritmi riippuu siitä mitä koodi tekee ja miten koodi toimii, mutta myös siitä millaiset fyysiset resurssit ympäristössä on käytössä. Oli osittain yllätys – osittain ei- nähdä tuore tutkimus jossa mainittiin että suurin osa ihmisistä ajelee Javaa vaativissakin ympäristöissä oletusasetuksin. Osittain johtuu siitä että ei ole tietoa paremmasta. Varmasti osittain myös siitä että ei ole tarvetta – rauta on verrattain halpaa ja resursseja piisaa useimmiten tuhlattavaksi. Eniten optimoinnista hyötyvät ne, joiden softan pitää toimia äärimmäisen niukissa olosuhteissa – tai sitten äärimmäisen runsaissa, kuten Twitterin 64-gigaiset konehirviöt.

Joka tapauksessa, Performance Zone tekemän tutkimuksen mukaan 13% on säätänyt virtuaalikonealgoritmia, 87% jättää sen oletuksille. Joka on hyvä, oletusalgoritmi on useimmiten oivallinen. Mutta kun tarjolla on mm. rinnakkaisroskankeruuta, lyhyiden paussien algoritmeja, ja uusin G1, vaihtoehtojakin on. Toki oletuksetkin vaihtuvat virtuaalikoneen version ja ympäröivän koneen luokituksen mukaan (Server/Workstation).

Mielenkiintoista on myös että uusin ja kaunein G1 on myös kiistanalaisin – tutkimuksessa ihmetelläänkin miten niin monet ovat sen jo päälle kääntäneet, vaikka se ei tuo välttämättä useimmissa tapauksissa yhtään hyötyjä suorituskykyyn vaan pikemminkin hidastaa – myös omiin kokemuksiin perustuen. Kuinka ollakaan, Performance Labin kaverit ovat kenties unohtaneet mikä on G1 mallin todellinen hyöty: Roskankeruupaussien minimointi. Se on suunniteltu ennen muuta massiivisille heap muisteille joissa perinteinen roskankeruu voi pysäyttää toiminnan järkyttävän pitkiksi ajoiksi. Joka ei ole serverilläkään hyvä asia, saati sitten itseohjautuvassa älyautossa. Pienemmilläkin heap muisteilla sillä voi pyrkiä tasoittamaan roskankeruupausseja – joka toki yleensä tekee roskankeruusta kaiken kaikkiaan hitaampaa – mutta tasaisempaa. Try it!

Tässä lähdelinkki tutkimukseen:

http://java.dzone.com/articles/what-garbage-collector-are-you

Ja jos se optimointi kiinnostaa niin tässä härski puffi oman firman koulutukseen:

http://www.tieturi.fi/kurssit/kurssi.html?course=83901618

Blogeissahan ei saa nykyisellään kauhean vaivihkaisesti mainostaa joten pitäisi varmaan suurentaa tuota fonttia ja kirjoittaa disclaimer: Kaikki mitä täällä kirjoitan saattaa johtaa addiktioon seurata blogia jatkossakin, sekä mahdolliseen ostopäätökseen itseään kehittävien koulutusten suhteen – joko meiltä tai muilta 😉

http://www.kkv.fi/Page/d45bee63-a3a7-49a1-b8c8-5d6fa02a6dba.aspx

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s