2012-12-14 3 views
1

가비지 수집을 보여주는 간단한 프로그램을 작성했습니다.가비지 수집 데모 프로그램이 컴파일되지 않습니다.

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    No enclosing instance of type GCDemo is accessible. Must qualify the allocation with an enclosing instance of type GCDemo (e.g. x.new A() where x is an instance of GCDemo). 

    at GCDemo.main(GCDemo.java:3) 

어떤 도움 : 나는 그것을 컴파일 할 때

public class GCDemo{ 

public static void main(String[] args){ 
    MyClass ob = new MyClass(0); 
    for(int i = 1; i <= 1000000; i++) 
     ob.generate(i); 
} 

/** 
* A class to demonstrate garbage collection and the finalize method. 
*/ 
class MyClass{ 
    int x; 

    public MyClass(int i){ 
     this.x = i; 
    } 

    /** 
    * Called when object is recycled. 
    */ 
    @Override protected void finalize(){ 
     System.out.println("Finalizing..."); 
    } 

    /** 
    * Generates an object that is immediately abandoned. 
    * 
    * @param int i - An integer. 
    */ 
    public void generate(int i){ 
     MyClass o = new MyClass(i); 
    } 
} 

}

그러나, 그것은 다음과 같은 오류를 보여줍니다 다음 코드는? 감사!

+0

[Java - Foo 유형의 엔 클로징 인스턴스를 액세스 할 수 없음] 가능한 복제본 (http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible) – fabian

답변

2

만들기 MyClass 정적이없이

static class MyClass { 

, 당신은 MyClass를 인스턴스화하기 위해 GCDemo의 인스턴스를해야합니다. main() 자체는 static이므로 이러한 인스턴스가 없습니다.

+2

+1'main'은 정적 컨텍스트에 있으므로 그러한 인스턴스가 있다고 가정 할 수 없습니다. –

0

예제를 간소화 할 수 있습니다. 이것은 메시지를보아야한다는 것을 제외하고는 똑같은 것을 할 것입니다. 예제에서 GC는 실행되지 않을 수 있으므로 프로그램 종료와 관련하여 아무 것도 표시되지 않을 수도 있습니다.

while(true) { 
    new Object() { 
    @Override protected void finalize(){ 
     System.out.println("Finalizing..."); 
    } 
    Thread.yield(); // to avoid hanging the computer. :| 
} 

기본 문제는 중첩 된 클래스가 정적이어야한다는 것입니다.

+0

죄송합니다.하지만이 코드는 컴퓨터를 멈 춥니 다 !! –

+1

좋습니다, 수확량으로 시도하십시오. –

+0

문제는 화면에 인쇄하는 속도가 매우 느리지 만 개체를 ​​만드는 속도가 훨씬 빠르다는 것입니다. 즉, 개체를 정리 한 것보다 빠르게 처리 할 수 ​​있습니다. –