β’
reference counting - ꡬμ
β¦
μλ‘λ₯Ό μ°Έμ‘°νλ κ°μ²΄μ κ²½μ° μν μ°Έμ‘° κ° λ¬Έμ λ°μμΌλ‘ μ¬μ©λμ§ μμ
β’
mark and sweep - νμ¬ μ¬μ©λλ λ°©μμΌλ‘ κ°μ λ λ²μ μΌλ‘ μ¬μ©
β¦
gc rootλ‘λΆν° λλ¬ν μ μλμ§ μ²΄ν¬
// λ¬Έμ : μλκ° μ€νλλλ‘ ν΄μ£ΌμΈμ.
// 쑰건 : λ°°μ΄μ μ¬μ©ν μ μμ΅λλ€.
class Main {
public static void main(String[] args) {
μ¬λμΈλ ₯κ΄λ¦¬μ aμ¬λμΈλ ₯κ΄λ¦¬μ = new μ¬λμΈλ ₯κ΄λ¦¬μ();
aμ¬λμΈλ ₯κ΄λ¦¬μ.addμ¬λ("νκΈΈμ", 33);
// λμ΄κ° 33μ΄μΈ 1λ²μ§Έ μ¬λ(νκΈΈμ)μ΄ μΆκ°λμμ΅λλ€.
aμ¬λμΈλ ₯κ΄λ¦¬μ.addμ¬λ("νκΈΈλ", 20);
// λμ΄κ° 20μ΄μΈ 2λ²μ§Έ μ¬λ(νκΈΈλ)μ΄ μΆκ°λμμ΅λλ€.
aμ¬λμΈλ ₯κ΄λ¦¬μ.addμ¬λ("μκΊ½μ ", 30);
// λμ΄κ° 30μ΄μΈ 3λ²μ§Έ μ¬λ(μκΊ½μ )μ΄ μΆκ°λμμ΅λλ€.
μ¬λ aμ¬λ1 = aμ¬λμΈλ ₯κ΄λ¦¬μ.getμ¬λ(1);
aμ¬λ1.μκΈ°μκ°();
// μ λ 1λ², νκΈΈμ, 33μ΄ μ
λλ€.
μ¬λ aμ¬λ2 = aμ¬λμΈλ ₯κ΄λ¦¬μ.getμ¬λ(2);
aμ¬λ2.μκΈ°μκ°();
// μ λ 2λ², νκΈΈλ, 20μ΄ μ
λλ€.
μ¬λ aμ¬λ3 = aμ¬λμΈλ ₯κ΄λ¦¬μ.getμ¬λ(3);
aμ¬λ3.μκΈ°μκ°();
// μ λ 3λ², μκΊ½μ , 30μ΄ μ
λλ€.
}
}
class μ¬λμΈλ ₯κ΄λ¦¬μ {
μ¬λ μ²μμ¬λ;
int μΈμμ;
void addμ¬λ(String μ΄λ¦, int λμ΄) {
if (μ²μμ¬λ == null) {
μ²μμ¬λ = new μ¬λ(μΈμμ++, μ΄λ¦, λμ΄);
}
else {
μ¬λ νμ¬μ¬λ = μ²μμ¬λ;
while(νμ¬μ¬λ.λ€μμ¬λ != null){
νμ¬μ¬λ = νμ¬μ¬λ.λ€μμ¬λ;
}
νμ¬μ¬λ.λ€μμ¬λ = new μ¬λ(μΈμμ++, μ΄λ¦, λμ΄);
}
}
μ¬λ getμ¬λ(int λ²νΈ) {
μ¬λ νμ¬μ¬λ = μ²μμ¬λ;
for (int i=1; i<λ²νΈ; i++) {
νμ¬μ¬λ = νμ¬μ¬λ.λ€μμ¬λ;
}
return νμ¬μ¬λ;
}
}
class μ¬λ {
int λ²νΈ;
String μ΄λ¦;
int λμ΄;
μ¬λ λ€μμ¬λ;
μ¬λ(int λ²νΈ, String μ΄λ¦, int λμ΄) {
this.λ²νΈ = λ²νΈ;
this.μ΄λ¦ = μ΄λ¦;
this.λμ΄ = λμ΄;
}
void μκΈ°μκ°() {
System.out.println("μ λ " + this.λ²νΈ + " λ², " + this.μ΄λ¦ + ", " + this.λμ΄ + "μ
λλ€.");
}
}
Java
볡μ¬