2011-05-02 2 views
1

2400x1800 버퍼 이미지 (많은 리소스가 필요하다는 것을 알고 있음)를 사용하는 앱이 있지만 완벽하게 90 % 이상 작동합니다. 130MB RAM을 사용하고 5 %의 CPU를 사용합니다.Java 앱이 시간의 10 %를 깨기

문제는 10 %의 시간에는 큰 지연이 있고 40-50mb의 RAM 만 소모하고 CPU의 50 %를 사용한다는 것입니다. 왜 같은 기억을 먹지 않았을까요?

제가 코드를 게시해야한다는 것을 알고 있지만,이 앱이 정말 큽니다.이 특정 문제에 관해 조금 이야기 할 수있는 링크가 큰 도움이 될 것입니다.

+1

잘못 작동하면 프로파일 러 (또는 샘플러)를 실행하고 항상 실행중인 코드를 확인하십시오. 그것은 당신을 시작해야합니다. –

+0

가비지 컬렉터가 "나쁜"시간에 실행되는지 여부를 확인 했습니까? 나는 그것이라고 생각한다. – Borealid

답변

0

에 대한 안내입니다.

다음 실행 구성 ...

가 다음 주자를 선택 RUN 메뉴로 이동 (당신이 그것을 사용하는 가정) 이클립스에서 이것을 시도.

(x) = 인수 탭을 클릭하십시오.

-Xmx512m -Xss150m

... 이것이 당신의 JVM 이미 할당 무료 이상의 RAM 150메가바이트 시작하게됩니다 그것을 실행 해보십시오 당신의 VM 인수이 추가 ...

이클립스를 사용하지 않는 경우 해당 매개 변수를 java 명령 줄에 추가하기 만하면됩니다.

+0

나는 Netbeans를 사용하지만, 그럼에도 불구하고 매우 도움이되는 응답입니다. 감사합니다 –

+0

희망 그것을 해결! –

0

프로파일 러를 통해 실행하십시오. JProfiler는 사용하기 좋은 제품입니다.

0

사진을 한 번에로드 하시겠습니까? 왜 그것을 타일링하고 이미지를로드하는 일부 스레드를 만드시겠습니까? 보기를로드하는 프로그램 부분이 너무 큰 경우 스레드로 확산하지 않는 이유는 무엇입니까? 더 많은 조언이 필요하십니까?

+0

아니, 귀하의 도움을 주셔서 감사합니다 –

0

첫 번째 행운을 빌어 요, 130MB이 당신은 픽셀 당 27Byte를 소비하는 것을 의미, 심지어 2400x1800 이미지, 많은입니다. 픽셀 (또는 4 바이트) 이미지 당 고전 32 비트에 대한

, 당신은 가비지 컬렉터가 호출 될 때까지 당신이 더 많은 메모리를 소비한다는 것, 당신이 말한에서만 16~17메가바이트

둘째를 필요로 메모리를 확보하기 위해 많은 작업을 수행합니다.

가능성 : - 사용할 수있는 최대 메모리를 늘리십시오. - 가비지 수집기를 미세 조정하여 더 자주 일시 중지하지만 더 자주 수행하도록 조정하십시오.

편집 : 어쩌면 당신은이 크기의 새로운 이미지를 많이 만들어서 업데이트하지 않고 많은 양의 메모리 할당과 메모리 풀기가 필요합니까?

+0

응용 프로그램이 더 큰, .. 감사합니다. –

0

질문에 대한 답변은 거의 없지만 응용 프로그램의주기적인 속도 저하는 종종 garbage collection으로 인해 발생합니다. 실행 jvisualvm 및 메모리와 관련된 그래프를보십시오. 성능 저하의 시작과 일치하는 최고점을 가진 톱니 패턴을 보면 가비지 컬렉터가 많은 양의 객체를 처리하기 때문에 앱이 느려지 게됩니다. 이것은 코드에서 객체를 낭비하게 만드는 것에 대한 회비가 될 수도 있고 VM에 더 많은 메모리를 할당해야 할 수도 있습니다. 여기

아마의 -Xmx와 같은 JVM 매개 변수를 사용자에게 도움이 될 수 및 XSS (이 해당 응용 프로그램의 시작 메모리입니다) (이것은 사용하는 응용 프로그램에 최대 크기의 사용 가능한입니다)를 실행