메모리 유출과 메모리 넘침은 어리석게 구분할 수 없나?간단하게 정리해 드릴게요!
3497 단어 Java 관련
간단하게 말하면 메모리 유출은 살아남을 필요가 없는 대상이 메모리를 회수할 수 없는 것이다.메모리 넘침은 필요한 대상입니다. 메모리가 충분하지 않습니다.
메모리 유출
메모리 유출(memory leak): 프로그램이 메모리를 신청한 후 이미 신청한 메모리 공간을 방출하지 못하면 메모리 유출이 발생한다. 한 번의 메모리 유출은 큰 영향을 미치지 않을 것 같지만 메모리 유출이 쌓인 결과는 메모리 유출이다.
흔한 원인
한 대상이 회수되어야 할 것을 더 이상 사용할 필요가 없을 때, 다른 사용 중인 대상이 인용을 가지고 있어서 회수할 수 없게 되고, 회수되어야 할 대상이 회수되지 않고 메모리에 머무르게 되면 메모리 유출이 발생한다.
인코딩 문제로 인해 생명주기가 짧고 회수해야 할 대상이 gc에 의해 회수되지 못한다는 것이 제 이해입니다.
예를 들다
정적 클래스는 단일 모드를 실현합니다.적용되는 라이프 사이클만큼 긴 라이프 사이클이므로 단일 인스턴스를 작성할 때 다른 객체로 전달되면 객체를 회수할 수 없습니다.
/**
* , ,
*
* @author baijiaan
* @date 2020-05-27
*/
public class SingleInstanceTest {
private static SingleInstanceTest sInstance;
private OneObject oneObject;
private SingleInstanceTest(OneObject oneObject) {
this.oneObject = oneObject;
}
public static SingleInstanceTest newInstance(OneObject oneObject) {
if (sInstance == null) {
sInstance = new SingleInstanceTest(oneObject);
}
return sInstance;
}
}
메모리 오버플로우
메모리 오버플로우(out of memory): 프로그램이 메모리를 신청할 때 신청자가 사용할 충분한 메모리가 없거나 int 형식의 데이터를 저장할 수 있는 저장 공간을 주지만 롱 형식의 데이터를 저장하면 결과적으로 메모리가 충분하지 않다. 이때 OOM을 잘못 보고한다. 이른바 메모리 오버플로우다. 쉽게 말하면 우리가 가지고 있는 메모리보다 자신이 필요로 하는 공간이 크다.메모리 부족으로 인한 메모리 넘침
흔한 원인
메모리가 넘치는 원인은 비교적 광범위하다.
해결 방법
위의 일반적인 원인에 대응하여 우리가 대략적인 해결 방향은 다음과 같다.
총결산
개인은 메모리 유출은 일종의 행위이고 메모리 넘침은 결과라는 것을 이해한다.메모리가 넘쳐흐르면 시스템이 정상적으로 사용할 수 없습니다.간혹 메모리 유출은 무섭지 않고 빈번한 메모리 유출은 나쁜 결과를 초래할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
메모리 유출과 메모리 넘침은 어리석게 구분할 수 없나?간단하게 정리해 드릴게요!메모리 유출과 메모리 넘침은 메모리를 합리적으로 사용할 수 없게 할 수 있지만 그 사이에 확실히 차이가 있어 헷갈리기 쉽다. 간단하게 말하면 메모리 유출은 살아남을 필요가 없는 대상이 메모리를 회수할 수 없는 것이다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.