IT Share you

gc ()와 rm ()의 차이점은 무엇입니까?

shareyou 2020. 12. 12. 12:40
반응형

gc ()와 rm ()의 차이점은 무엇입니까?


에 대한 호출을 사용하여 R의 메모리를 주기적으로 청소하고 rm(list=ls())있습니다. 그 후에
가비지 수집기에 전화해야 gc()합니까?

이 두 기능의 차이점은 무엇입니까? 않는 gc()전화를 rm()특정 변수에 대한?


첫째, 두 사람은 그 매우 다르다는 것을 주목하는 것이 중요하다 gc삭제되지 않습니다 어떤 당신은 여전히 그것은 단지 더 이상 사용하여 제거 여부에 대한 액세스 권한을 (가지고 사람을위한 메모리 비워 일 아민되는 변수를 rm()하거나, 말, 생성을 이후 반환 된 함수에서). 달리기 gc()는 절대 변수를 잃지 않습니다.

하지만을 (를) 호출 gc()한 후 전화 를해야하는지 여부 rm()는 좋은 질문입니다 . gc에 대한 문서 는 다음과 같이 유용하게 기록됩니다.

gc를 호출하면 가비지 콜렉션이 발생합니다. 이것은 또한 사용자 개입없이 자동으로 수행되며 gc를 호출하는 주요 목적은 메모리 사용량에 대한 보고서입니다.

그러나 큰 개체가 제거 된 후 gc를 호출하면 R이 운영 체제에 메모리를 반환하라는 메시지가 표시 될 수 있으므로 gc를 호출하는 것이 유용 할 수 있습니다.

그래서 대답은 gc()어쨌든 (즉시가 아니라면 곧 곧) 트리거 될 가능성이 있지만 전화하는 것이 좋을 수 있다는 것입니다 (적어도 상처를 입힐 수는 없습니다).


개인적 gc()으로 루프가 사용 가능한 공간을 채우기 시작할 때 일부 RAM을 확보하기 위해 in 루프 를 포함하고 싶습니다 . 같은 것

for(i in 1:1000){
res[[i]] = some operation
gc()
}

Gc 패널티에 대한 ThankGoat의 의견을 다시 작성하십시오. 이것은 사실이지만 루프에서 N 반복마다 gc를 호출하도록 결정할 수 있습니다 (여기서 N은 여러 가지 방법으로 매개 변수화 할 수 있음). 반복 횟수는 많지만 주어진 반복 내에서 리소스 사용량이 더 적은 루프의 경우 원하는 성능을 다시 얻기 위해 반복마다 GC를 수행 할 필요는 없습니다.

물론 매우 많은 사용량의 반복을 반복하는 경우 다른 이야기이지만 그 단계에서는 코드를 단순히 벡터화하거나 다른 언어로 작성해야 할 수도 있습니다. .

참고 URL : https://stackoverflow.com/questions/8813753/what-is-the-difference-between-gc-and-rm

반응형