내 코드에 foreach
문이 있는데, 각 반복마다 막대한 양의 데이터가 계산되고 다음 반복으로 넘어갑니다. 이 코드를 실행하지만 로그를 읽을 때 메모리 누수 오류가 있음을 알 수 있습니다.왜 코드에서 가비지 수집이 활성화되어 있지 않습니까?
PHP.net에서는 이런 일이 발생하면 gc_enabled()
을 사용하는 것이 좋습니다.
은 내가 foreach
블록의 마지막 줄에이 라인을 추가했습니다 :
echo "Check GC enabled : " . gc_enabled();
echo "Number of affected cycles : " . gc_collect_cycles();
을 그리고 이것은 출력 :
Check GC enabled : 1
Number of affected cycles : 0
왜 사이클이 존재하지만, 영향을받는주기는 0?
감사합니다. 알았다. 여전히 오류가 있습니다. 나는 나의 긴 계산을 일부분 축소해야한다고 생각한다! – Netmoon
"주기가 수집되지 않았으므로 첫 번째 장소에서 메모리 누출이 없음을 의미합니다."실제로 그런 의미는 아닙니다. 관리 환경에서는 더 이상 실제로 사용하지 않을 때 개체를 유지하면 메모리 누수가 발생합니다. 1,000,000 개의 GC 콜렉션도 이러한 변수를 지우지는 못합니다. 그래서 그들은 누수 *입니다. 수집은 사용되지 않는 변수를 확인하고 이전에 점유 한 메모리 슬롯을 비 웁니다. –
@ YamMarcovic 맞아요.하지만 대답은 질문의 맥락에서입니다. 나는 그 문장을 바꾸었다. – user39596