기사를 오래 읽었으므로 찾을 수 없습니다. 범위 안에있는 객체가 아직 지워지지 않을 수도있는 아래의 행동을 설명했다. 어떤 경우에는 당신이 아래 내가 인쇄 문 A
에 finalize
을 넣었을 때 OutOfMemoryError
범위에서 개체를 지우지 않는 GC
public static void main(String[] args) {
List<A> collect = null;
int i=0;
while(true){
System.out.println(i++);
collect = IntStream.range(0, 10_00_000).mapToObj(x -> new A(x + "")).collect(Collectors.toList());
}
}
class A{
String temp;
A(String a){
this.temp = a;
}
}
로 끝나는 이유에 대해 설명하는 데 도움 주시기 바랍니다 수 있습니다, 그것은 인쇄되지 않습니다. 그리고 몇 번의 반복 작업 후에 인스턴스는 OOME
으로 끝납니다. 이전에 생성 된 gc
이 지워지지 않는 이유는 무엇입니까? collect
. 그리고 반복 횟수뿐만 아니라이 3
심지어 100
범위, 일정하지 않지만 궁극적으로 두 번째로 재미를 위해 -Xmx500m
실패, 나는 JIT 장애인 -Djava.compiler=NONE
와 위의 프로그램을 실행했습니다. 그리고 예상대로 영원히 돌아갑니다. JIT는 어떻게 영향을 줍니까?
추신 : 내 while 절에 System.gc();
을 포함하면 예상대로 실행됩니다.
System.out 다음에 버퍼를 플러시하십시오. –
@MarshallTigerus 그다지 영향을 미치지 않습니다. 그건 그렇고, 그것은 defaul에 의해 홍조가된다. t – Jatin
주요한 이슈는 모든 반복에서 새로운 1m elems리스트를 생성하고 오래된리스트를 무시한다는 것이다. 어쩌면'collect.clear()'와'collect.addAll()'을 대신 호출하면 – everton