JAVA 메모리 유출 과 메모리 유출 의 차이
1880 단어 메모리 관리
메모리 유출 memory leak 은 프로그램 이 메모 리 를 신청 한 후에 이미 신청 한 메모리 공간 을 방출 할 수 없 으 며,한 번 의 메모리 유출 위 해 는 무시 할 수 있 으 나,메모리 유출 축적 결 과 는 매우 심각 하 며,아무리 많은 메모리 가 있어 도 조만간 빛 을 볼 것 이다.
memory leak 는 결국 out of memory 를 초래 할 수 있 습 니 다!
메모리 가 넘 치 는 것 은 시스템 이 줄 수 있 는 것 을 초과 한 것 입 니 다.시스템 이 수 요 를 만족 시 키 지 못 해서 넘 치 는 것 입 니 다.
(new), (delete), ( ), 。 4 , 5 , 。 ! , , , , 。 , .
발생 하 는 방식 으로 분류 하면 메모리 누 출 은 4 가지 로 나 눌 수 있다.
상 발성 메모리 누 출.메모리 누 출 이 발생 하 는 코드 는 여러 번 실 행 됩 니 다.실 행 될 때마다 메모리 가 누 출 됩 니 다
우발 적 인 메모리 유출.메모리 누 출 이 발생 하 는 코드 는 특정 환경 이나 작업 과정 에서 만 발생 합 니 다.상 발성 과 우발 성 은 상대적이다.특정한 환경 에 대해 우발 적 인 것 은 아마도 상 발성 으로 변 할 것 이다.그래서 테스트 환경 과 테스트 방법 은 메모리 누 출 을 검사 하 는 데 매우 중요 하 다
일회 성 메모리 유출.메모리 누 출 이 발생 하 는 코드 는 한 번 만 실행 되 거나 알고리즘 상의 결함 으로 인해 한 조각 만 유출 될 수 있 습 니 다.예 를 들 어 클래스 의 구조 함수 에서 메모 리 를 분배 하고 분석 함수 에서 이 메모 리 를 방출 하지 않 았 기 때문에 메모리 누 출 은 한 번 만 발생 할 수 있다
4.567917.암시 적 메모리 누 출.프로그램 은 실행 중 에 끊임없이 메모 리 를 분배 하지만 끝 날 때 까지 메모 리 를 방출 합 니 다.엄 밀 히 말 하면 여기에서 메모리 누 출 이 발생 하지 않 았 다.왜냐하면 최종 프로그램 이 모든 신청 한 메모 리 를 방출 했 기 때문이다.그러나 서버 프로그램 에 대해 서 는 며칠,몇 주,심지어 몇 달 동안 실행 해 야 하 며,메모 리 를 제때에 방출 하지 않 아 도 최종 적 으로 시스템 의 모든 메모 리 를 다 소모 할 수 있다.그래서 우 리 는 이러한 메모리 누 출 을 암시 적 메모리 누 출 이 라 고 부른다
사용자 가 프로그램 을 사용 하 는 측면 에서 볼 때 메모리 누 출 자체 에 해 를 끼 치지 않 고 일반 사용자 로 서 메모리 누 출 의 존 재 를 전혀 느끼 지 못 한다.정말 해 가 되 는 것 은 메모리 누 출 의 축적 이다.이것 은 결국 시스템 의 모든 메모 리 를 소모 하 게 될 것 이다.이런 측면 에서 볼 때,일회 성 메모리 누 출 은 아무런 해 가 없다.왜냐하면 그것 은 쌓 이지 않 기 때문에,스텔스 메모리 누 출 의 위해 성 은 매우 크다.왜냐하면 상 발성 과 우발 성 메모리 누 출 보다 검출 되 기 어렵 기 때문이다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MRC 아래의 initWithFormat:과stringWithFormat:이 두 가지 방법은 같다.우리가 알아야 할 것은 어떻게 그들을 정확하게 사용하는가이다.initWithFormat는 새로운 alloc 실례에 호출되어야 하는 실례적인 방법입니다. 이것은 당신이 그것을 석방할 책임이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.