2012-11-28 4 views
1

등의 간단한 질문에 대한 미안하지만 난 자바 에 새로운 오전루프에서 새 작업을 수행하면 이전 객체가 삭제됩니까?

개체의 이전 인스턴스를 삭제 루프에서 새로운 수행 (데는 보통 C로 작성)?

는 난 그냥 매 프레임마다, 여기에 위의 sourceimage 객체 의 새로운 wraping을 얻을 필요가

for(;;) 
    { 

    // work on here pixels[] 

    source = new MemoryImageSource(200, 200, pixels, 0, 50); 
    image = createImage(source; 

    // then use image here 

    } 

같은 뭔가가 필요하고, 그것을 삭제하는 귀찮게하지 않을뿐만 아니라 내가 할 메모리 누수로 많은 양의 데이터를 저장하지 않으려면
자동으로 삭제 되나요? 무거운 조작입니까?

+2

어쨌든 Java에서는 삭제할 수 없습니다. 그냥 가비지 콜렉션을 위해 대기열에 넣을 수 있습니다. – auselen

+0

괜찮지 만 작동합니까? –

+2

더 이상 참조되지 않은 각 객체는 GC로 정리됩니다. 단 한 번에 완료되지는 않습니다. – Romczyk

답변

5

예, 더 이상 참조되지 않는 개체는 자동으로 가비지 수집됩니다 (나중에 지정되지 않은 지점에서).

내가 루프에 sourceimage의 선언을 이동하는 것이 좋습니다 :

for(;;) { 
    ... 
    Source source = new MemoryImageSource(200, 200, pixels, 0, 50); 
    Image image = createImage(source); 
    ... 
} 

뿐만 아니라이 문체, 또한 필요 이상으로 주위를 마지막 반복의 객체를 유지하는 것이 방지된다.

+0

루프 안의 객체를 선언하고 초기화하는 것은 좋지 않은 스타일입니다. 이런 식으로 더 많은 리소스를 소비합니다 ....메서드 내부에 메서드를 선언하는 것이 좋습니다. 메서드가 범위를 벗어나면 개체가 정리됩니다. – firephil

+0

@firephil : 질문의 요점은 모든 반복마다 개체 쌍이 새로 추가된다는 것입니다. – NPE

+0

요점은 루프가 1000 번 실행되는 경우 1000 개의 참조를 말하는 대신 하나의 참조를 다시 사용할 수 있다는 것입니다. 당신이 반복 할 때마다 새로운 참조 소스, 이미지 및 새 객체 소스, 이미지를 반복하지만 매 반복마다 새로운 참조를 새 객체에 할당하지 않아도됩니다. – firephil

2

아니요, 루프의 변수에 새 인스턴스를 만들고 할당해도 이전 인스턴스도 '가리키는'것이 아닙니다. 그러나 인스턴스에 대한 다른 참조가 없으면 가비지 수집 대상이됩니다.

+0

문제가 있습니까? 또는 그것을 사용할 수 있습니까? 다른 방법이 없다면 어떻게 할 수 있습니까? –

+0

코드의 다른 곳 (예 :'createImage' 함수)에서'source' 인스턴스를 잡고있는 한 괜찮습니다. – Perception

1

GC는 JAVA와 C++의 기본적인 차이점입니다. Java 개발자는 더 이상 인스턴스 삭제에 신경 쓸 필요가 없으며 인스턴스가 더 이상 참조되지 않으면 GC 메커니즘이 자동으로 삭제합니다. 예를 들어, 루프에 for (int i =0;i < 2;i ++){ source = new MemoryImageSource(200, 200, pixels, 0, 50); } 과 같은 실제로는 2 개의 인스턴스가 만들어집니다. 그러나 두 번째 인스턴스 만 루프 후에 소스에 의해 참조됩니다. 따라서 첫 번째 인스턴스는 가비지 수집 될 수 있습니다.

1

의 마르코 Topolnik의 설명입니다 참조 :

Image image; 

for(;;) { 

    image = createImage(new MemoryImageSource(200, 200, pixels, 0, 50)); 
    ... 
} 

당신은 당신이 그 (것)를 많이 사용하는 경우 축적 한 unnecerary 참조를 제거하고 대신 이미지 이미지 참조를 재사용 참조를 위해 모든 반복에서 메모리 할당.

+0

좋습니다. 도움이 될 것입니다. tnx –

관련 문제