메모리 오버플로에는 여러 가지 이유가 있으며 일반적인 이유는 다음과 같습니다.
코드에 무한 루프가 있거나 루프가 사용된 타사 소프트웨어에 너무 많은 중복 개체 엔터티를 생성합니다. ;
시작 매개변수 메모리 값 설정이 너무 작습니다.
메모리 오버플로에 대한 해결 방법:첫 번째; 단계는 JVM 시작 매개변수를 수정하고 메모리를 직접 늘리는 것입니다. (-Xms 및 -Xmx 매개변수를 추가하는 것을 잊지 마세요.)두 번째 단계는 오류 로그를 확인하여 "OutOfMemory" 오류 이전에 다른 예외나 오류가 있는지 확인하는 것입니다.
세 번째 단계는 코드를 살펴보고 분석하여 메모리 오버플로가 발생할 수 있는 위치를 찾는 것입니다.
다음 사항에 중점을 둡니다.데이터베이스 쿼리에서 모든 데이터를 한 번에 가져오는 쿼리가 있는지 확인하세요. 일반적으로 100,000개의 레코드를 한 번에 메모리로 가져오면 메모리 오버플로가 발생할 수 있습니다. 이 문제는 상대적으로 숨겨져 있습니다. 온라인으로 전환하기 전에는 데이터베이스에 데이터가 적고 문제가 발생할 가능성이 적었지만 온라인으로 전환한 후에는 데이터베이스에 데이터가 많아 단일 쿼리로 인해 메모리 오버플로가 발생할 수 있습니다. 따라서 데이터베이스 쿼리에는 페이징을 사용해 보세요. 무한 루프 또는 재귀 호출에 대한 코드를 확인하십시오. 새로운 객체 엔터티를 반복적으로 생성하는 큰 루프가 있는지 확인하십시오.
데이터베이스 쿼리에 모든 데이터를 가져오는 쿼리가 있는지 확인하세요. 일반적으로 100,000개의 레코드를 한 번에 메모리로 가져오면 메모리 오버플로가 발생할 수 있습니다.
이 문제는 상대적으로 숨겨져 있습니다. 온라인에 접속하기 전에는 데이터베이스에 데이터가 적었고 온라인에 접속한 후에는 데이터베이스에 더 많은 데이터가 있었고 단일 쿼리가 발생했습니다. 메모리 오버플로가 발생할 수 있습니다.
따라서 데이터베이스 쿼리에는 페이징을 사용해 보세요.
사용 후 List, MAP 등 컬렉션 객체가 지워지지 않는지 확인하세요. List 및 MAP과 같은 컬렉션 개체에는 항상 개체에 대한 참조가 있으므로 이러한 개체는 GC에서 재활용될 수 없습니다.
네 번째 단계는 메모리 보기 도구를 사용하여 메모리 사용량을 동적으로 확인하는 것입니다.
위 내용은 자바 메모리 오버플로 인터뷰 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!