2014-07-22 2 views
1

가비지 콜렉션을 연구 중이므로 Java 가상 머신에서 내부적으로 어떻게 작동 하는지를 연구하고 있습니다. finalize (java.lang.Object에 위치)라는 메서드를 발견했습니다. 이 코드 시도 :Java [가비지 콜렉션]의 Finalize 메소드

class Demo { 
    int x= 10; 
    int y = 20; 

    public void finalize() throws Throwable { 
     System.out.println("Finalize method"); 
    } 

    static void show() { 
     Demo d1= new Demo(); 
     display(); 
    } 

    static void display() 
    { 
     Demo d2 = new Demo(); 
    } 
} 

class Temp { 
    public static void main(String args[]) throws Exception { 
     Demo.show(); 
    } 
} 

이 코드를 컴파일 할 수 있었다, 그러나 나는이 코드를 실행하면 예외없이 출력이 없습니다.

가능한 경우 알려주세요.

내 문제 (tutorialsPoint) (JavaRevisited)를 해결하기 위해 Google과 다른 많은 유명 블로그를 사용해 보았습니다.

심지어 stackoverflow를 검색했지만 문제를 해결할 수 없습니다.

P .: 출력은 사용자가 지적 할 수있는 Finalize 메서드 여야합니다. 제발 도와주세요.

요약하면, 내 질문은 : Finalize 메서드를 실행할 수없는 이유는 무엇입니까?

+0

당신의 프로그램이 종료하기 전에 개념을 완성 이해하는 데 매우 도움이 될 것입니다. – immibis

+0

'demo.show();'-> 프로그램은 * 그대로 컴파일되지 않습니다. – TheLostMind

+0

나는 거기에 원하는 결과를 얻을 수있는 방법을 묻는 방법입니다. 메서드를 최종 ... 만약 내가 1000 개체 (나는 이것이 1000 개체를 필요로하는 바보 같은 생각을 알고) 글쎄 그냥 난 가비지 수집 방법을 정확히 알고 싶어요 work –

답변

3

Java의 가비지 수집은 JVM에서만 처리되며 언제 발생할지 확실하지 않습니다. 사람들은 또한

System.gc(); 

을 사용하여 이것을 사용하여 가비지 수집이 수행되었는지를 확인합니다. 가비지 콜렉션이 필요하다는 것을 VM에 제안하면됩니다.

+0

Swaraj 나는 System.gc()를 시도했다 // // 나는 쓰레기를 모으기 위해 jvm을 믿는 요청인가? ?? 나는 10의 실행 당 2-3 출력을 얻고있다. –

+0

예 thats correct.앞에서 말한 것처럼 가비지 수집기는 명령에 의존하지 않습니다. JVM 만 GC를 처리하고 JVM으로 작성된 알고리즘을 사용합니다. – Swaraj

0

개체가 실제로 가비지 수집기에서 제거되면 finalize 메서드가 호출됩니다. 가비지 수집은 사용자가 제어 할 수 없으므로 실제로 메소드를 호출 할시기를 예측할 수 없습니다.

finalize 문에 일부 로거 명령문을 넣으십시오. 가비지 컬렉터.

관련 문제