>  기사  >  Java  >  자바 메모리 오버플로 인터뷰 질문

자바 메모리 오버플로 인터뷰 질문

(*-*)浩
(*-*)浩원래의
2019-11-14 14:56:272948검색

자바 메모리 오버플로 인터뷰 질문

메모리 오버플로에는 여러 가지 이유가 있으며 일반적인 이유는 다음과 같습니다.

#🎜 🎜 #데이터베이스에서 한 번에 너무 많은 데이터를 가져오는 등 메모리에 로드된 데이터의 양이 너무 많습니다.

컬렉션 클래스에 사용 후에도 지워지지 않는 개체에 대한 참조가 있습니다. , JVM을 재활용할 수 없게 만듭니다. #🎜 🎜#

코드에 무한 루프가 있거나 루프가 사용된 타사 소프트웨어에 너무 많은 중복 개체 엔터티를 생성합니다. ;

시작 매개변수 메모리 값 설정이 너무 작습니다.

메모리 오버플로에 대한 해결 방법:

첫 번째; 단계는 JVM 시작 매개변수를 수정하고 메모리를 직접 늘리는 것입니다. (-Xms 및 -Xmx 매개변수를 추가하는 것을 잊지 마세요.)두 번째 단계는 오류 로그를 확인하여 "OutOfMemory" 오류 이전에 다른 예외나 오류가 있는지 확인하는 것입니다.

세 번째 단계는 코드를 살펴보고 분석하여 메모리 오버플로가 발생할 수 있는 위치를 찾는 것입니다.

다음 사항에 중점을 둡니다.

데이터베이스 쿼리에서 모든 데이터를 한 번에 가져오는 쿼리가 있는지 확인하세요. 일반적으로 100,000개의 레코드를 한 번에 메모리로 가져오면 메모리 오버플로가 발생할 수 있습니다. 이 문제는 상대적으로 숨겨져 있습니다. 온라인으로 전환하기 전에는 데이터베이스에 데이터가 적고 문제가 발생할 가능성이 적었지만 온라인으로 전환한 후에는 데이터베이스에 데이터가 많아 단일 쿼리로 인해 메모리 오버플로가 발생할 수 있습니다. 따라서 데이터베이스 쿼리에는 페이징을 사용해 보세요. 무한 루프 또는 재귀 호출에 대한 코드를 확인하십시오. 새로운 객체 엔터티를 반복적으로 생성하는 큰 루프가 있는지 확인하십시오.

데이터베이스 쿼리에 모든 데이터를 가져오는 쿼리가 있는지 확인하세요. 일반적으로 100,000개의 레코드를 한 번에 메모리로 가져오면 메모리 오버플로가 발생할 수 있습니다.

이 문제는 상대적으로 숨겨져 있습니다. 온라인에 접속하기 전에는 데이터베이스에 데이터가 적었고 온라인에 접속한 후에는 데이터베이스에 더 많은 데이터가 있었고 단일 쿼리가 발생했습니다. 메모리 오버플로가 발생할 수 있습니다.

따라서 데이터베이스 쿼리에는 페이징을 사용해 보세요.

사용 후 List, MAP 등 컬렉션 객체가 지워지지 않는지 확인하세요. List 및 MAP과 같은 컬렉션 개체에는 항상 개체에 대한 참조가 있으므로 이러한 개체는 GC에서 재활용될 수 없습니다.

네 번째 단계는 메모리 보기 도구를 사용하여 메모리 사용량을 동적으로 확인하는 것입니다.

위 내용은 자바 메모리 오버플로 인터뷰 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.