2016-08-22 2 views
-2

오늘 일하는 동안 우리 응용 프로그램 중 하나에서이 문제가 발생했습니다. 시나리오 : 우리는로드 버튼을 클릭하여 데이터베이스에서 레코드 부족을로드합니다. 하지만 문제는 OutOfMemoryError를 제공하는 새로 고침 버튼을 클릭하여 동일한 레코드를 다시로드하는 것입니다. 누구나 가능한 원인 일 수있는 간단한 설명을 줄 수 있습니다. 처음 시도 할 때 모든 레코드가 잘로드되지만 이유는 우리가 예외를 새로 고치는 이유입니다.OutOfMemoryError를 얻는 주된 원인은 무엇입니까?

이 시나리오를 공부하는 데 유용한 리소스가 있으면 많은 도움이 될 것입니다. 미리 감사드립니다 ...

+1

당신이 이전 결과를 다시로드 할 때 메모리를 가지고 더 이상 확인하고하고 있습니까? – Mark

+0

이것이 도움이 될 수 있습니다 https://plumbr.eu/outofmemoryerror/java-heap-space – dhS

+0

이 프로젝트는 이미 개발되었으며 지난 주부터 작업 중입니다. 깊이있는 지식이 없습니다. 오래된 결과가 더 이상 메모리를 차지하지 않게 할 수있는 방법을 제안 해 주시겠습니까? 죄송하지만 보안 및 회사 정책을 위해 여기에 코드를 게시 할 수 없습니까? 일반적인 면죄가 도움이된다면. 감사. –

답변

-2

우리 응용 프로그램에는 스레드 처리가 많이 있다는 것을 알게되었습니다. 나는 아래의 명령을 사용하여 서버의 스택 크기를 줄이려고했는데 효과가 있었다. 여기

(이에 자바 스레드 스택 크기를 설정)

-Xss512k 난이 문제를 해결하기 위해 사용한 것처럼 resource이다.

+0

이것은 * 원인 *에 대한 대답이 아닙니다. 누적 된 스택 크기가 실제로 몇 가지 한계를 초과하도록 너무 많은 스레드를 생성했는지 확인할 수 있습니까? –

0

유일한 이유는 충분히 자유롭게하지 않고 끊임없이 새로운 개체를 만들거나 너무 많은 스레드를 만드는 경우입니다.

Java VisualVM's profiler을 사용하면 일부 메모리 프로파일 링을 할 수 있습니다. 이를 통해 객체가 메모리에 있고 객체/스레드가 참조하는 객체에 대한 개요를 얻을 수 있습니다.

Java VisualVM은 Sun의 JDK에 속해야합니다.

은 참조 :

관련 문제