2015-01-07 2 views
-1

아래 코드에서 - 객체 s2가 10000000 번 만들어지고 목록 외부에 추가됩니다 - samp2는 바깥의 어딘가에서 사용될 것입니다. 그것 [객체 생성]은 null로 만들어 GC를 얻습니까?여러 객체를 만드는 for 루프에서 메모리를 확보하는 방법은 무엇입니까?

누구든지 이에 대해 설명 할 수 있습니까?

GC가 발생하지 않으면 GC를 달성하는 방법이 많은 객체가 생성되어 목록에 추가되어 사용되지 않으므로?

친절하게 도와주세요. samp2 : */

List<SampleBean> samp2=new ArrayList<>(); 


for(int i=1;i<10000000;i++){ 

     SampleBean s2=new SampleBean(); 

     s2.x=i; 

     samp2.add(s2); 
     s2=null; 
} 

/SampleBean 클래스/

public class SampleBean{ 

    int x; 

} 

주 - - - - - - - - -

/- 객체를 보유하고있는 목록입니다. 외부에서 사용 중일 것입니다.

+2

아마도 가비지 수집에 대한 기본 자습서를 읽으십시오. 검색하면 많이 찾을 수 있습니다. 3.3 년 동안의 자바 경험이있는 바이오 상태에 주목할 수 없습니다. 가비지 콜렉션에서 읽을 시간은 아마도 ...? –

+0

안녕하세요 Jigar Joshi, ur comment 주셔서 감사합니다. 나는 현재 쓰레기 수거 과정을 이해하려고 노력 중이다. 나는 그 물체를 사용한 후에 역 참조하려고한다. 나는 그 질문을 제기했다. u pls가 예제와 함께 GC 프로세스의 일부 사이트 링크를 제안 할 수 있습니까? :) – ArunKR

답변

0

오브젝트는 다른 오브젝트가 참조를 보유하지 않을 때만 가비지 수집됩니다.

그런 경우, 각 요소에 대한 참조를 보유하고있는 samp2에 대한 참조가 여전히 유지되므로 가비지 수집되지 않습니다. 가변 영역은 해당 블록 S2 로서도

s2 = null; 

는 무관하다. 일단 블록의 끝으로 도달하면 변수는 사라집니다.

개체를 가비지 수집하려면 다른 참조를 갖고 있지 않은지 확인하십시오. 이 경우 단순히 samp2 ArrayList에서 제거하면됩니다.

+0

안녕하세요 @ manecosta, 정보 주셔서 감사합니다.하지만 어쨌든 ArrayList 루프 외부 필요한 이후 samp2 arrayList s2 개체를 제거 할 수 없습니다. 우리가 GC를 달성 할 수있는 다른 방법이 있습니까? 어떤 suggesstion? – ArunKR

+0

나는 당신이 원하는 것을 정확히 이해하지 못합니다. 루프 밖에서 samp2 내부의 객체가 필요하다면 왜 그 객체를 가비지 수집하기를 원합니까? samp2 배열 자체 만 필요하다면, 내부에서 객체를 제거하지 못하게 할 수는 없습니다. – manecosta

+0

안녕하세요 @ manecosta, 여기 내 이해를 설명합니다. SampleBean의 객체는 for 루프 내부에 반복적으로 생성되므로 (너무 많은 새로운 객체 및 이에 상응하는 메모리), 목록에 추가됩니다. 생성 된 객체에 메모리가 가득 차 있습니다. 그 객체에 대해 생성 된 메모리를 일단 목록에 추가하면 그 메모리가 해제됩니다. 배열 samp2는 SampleBean 객체로 채워진 한 번만 필요합니다. ur 제안에 따라 개체를 내부에서 제거하는 방법? 제 이해가 잘못 됐으면 제발 정정 해주시겠습니까? – ArunKR

관련 문제