Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java ja muistinkäyttö

staattinen [25.07.2013 19:33:57]

#

Moro,

olen tässä aloitellut Javalla koodaamista enkä oikeen ymmärrä, miten se hoitaa muistinkäytön. Tässä pieni esimerkki:

class Main() {
    static void Main() {
        A luokka1 = new A();
        B luokka2 = new B(luokka1);

        // heittääkö ohjelma erroria, jos yritän käyttää vielä luokka2sta / sen objektia Ö?
        A.getObjekti().delete();
    }
}

class A {
    Objekti O;

    public A() {
        O = new Objekti();
    }

    public Objekti getObjekti() { return O; }
}

class B {
    Objekti Ö;

    public B(A pointer) {
        Ö = pointer.getObjekti();
    }
}

class Objekti {
    Kuva K;

    public Objekti() {
        K = new Kuva();
    }

    public delete() {
        K.delete();
    }
}

Sisältääkö nyt siis luokan B objekti Ö pointterin/referenssin/mitänämäedesmeinaa luokan A objektiin O? Jos poistan luokan A objektin O ja koitan myöhemmin koodissa käyttää luokan B objektia Ö, heittääkö ohjelma erroria ja kaatuu?

VAI kopioiko luokka B luokan A objektin O objektiin Ö ja muistia menee kaksi kertaa enemmän ja kummatkin objektit täytyy poistaa? Huhhuh, sekoitin tässä itse itsenikin, koittakaa nyt jotain saada selvää. :D

Voisi kyllä tuota C++ssaa ruveta opiskelemaan, jotta ymmärtäisi enemmän tietokoneen sielunelämästä.

The Alchemist [25.07.2013 19:44:04]

#

Sinun ei tarvitse tuhota instansseja itse. Tämä on kyllä sanottu minkä tahansa java-oppaan ensimmäisessä kappaleessa, joten ihmettelen sekaannusta. Toisaalta voisit myös testata koodiasi, jolloin saisit vastauksen selville oma-aloitteisesti.

qeijo [25.07.2013 19:46:13]

#

Niin siis Javan automaattinen roskienkeruu huolehtii muistin vapauttamisesta.. Mutta onko tässä kyse nyt jostain muusta?

staattinen [25.07.2013 20:01:52]

#

Olen koodaamassa peliä, jonka jotkut luokat ovat aika raskaita. Tiedän, ettei instansseja tarvitse tai edes voi erikseen poistaa, mutta lisäsin sen nyt vain kysymystä vähän selventääkseni.

Oikeastaan ainoa objekti, jota passailen ympäri koodia erään staattisen luokan kautta on pelaaja, joten periaatteessa tämä kysymys on aika typerä ja nyt kun pohdin asiaa, niin tajusin jo vastauksenkin. :D

Aivojani hämmensi vain koodini aijemmista yksinkertaisimmista peleistäni poikkeava rakenne.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta