-
210421_3(garbageCollecting)JAVA(Sol)(정리대기중..언젠가) 2021. 4. 21. 12:21
garbage collecting
의미 : 참조되지 않는 heap 영역의 메모리를 한가할때 JVM이자동으로 수거하는 기능
자동으로 수거하도록 두는것이 가장 좋은 방법이다.
------code
class 코드영역
-------data
static 상수영역 정적영역
--------------------------------method area
-------heap
객체영역 gc대상영역:가끔수거
-------stack
메서드실행영역 자동수거
(블럭이 끝나거나, return을 만나면), 바로수거됨
강제 수거 명령
수거하다
System.gc();---> finalize() 자동 호출됨
finalize() : callback method(가상머신이 호출하는메서드)
-------------------------------------------------------------심화
finalize 메서드는 Object 클래스에서 제공하는 기본 메서드이다. 그래서 어느 클래스에서든지 finalize 메서드를 오버라이드 할 수 있다. 가비지 컬렉터에 의해 객체가 회수 될때, finalize 메서드가 호출된다.
문제점은 즉시 호출된다는 보장을 받을 수 없다.
결론: 자동으로 수거하도로 냅두는 것이 가장 좋은 방법이다.
package chapter12; public class GarbageTest { public static void main(String[] args) { Garbage[] ga = new Garbage[10]; // 객체 배열변수 //선언할떄 new한번 for (int i = 0; i < ga.length; i++) { ga[i] = new Garbage(i); // 객체의 생성 0~9 // 생성할때 new한번 } for (int i = 0; i < ga.length; i++) { ga[i] = null; // 메모리 참조 삭제 } System.gc(); //garbage collect 지금수거할래? super.finalize자동생성 } } class Garbage { int objNo; public Garbage(int n) { objNo = n; System.out.println("Garbage class" + objNo + "이만들어졌습니다."); } protected void finalize() throws Throwable { System.out.println("Garbage class" + objNo + "에서 쓰이던 메모리가 수집되었습니다"); super.finalize(); // 콜백메소드 System.gc(); 원래기능을 상실하여 재정의를 하는것 } }
'JAVA(Sol)(정리대기중..언젠가)' 카테고리의 다른 글
210421_5~8(오버라이딩Overriding,객체형변환, Object클래스) (0) 2021.04.21 210421_4(상속) (0) 2021.04.21 210421_2(접근제한자) (0) 2021.04.21 210420_5~7_210421_1chapter11.(Call by value/reference, 문자열) (0) 2021.04.20 210420_3~4(변수 유효범위,생성자특징) (0) 2021.04.20