시간이 지남에 따라 속도가 느려지는 모바일 응용 프로그램이 있습니다. 내 직감 (부분적으로는 this article으로 먹이를 먹었습니다)은 이것이 응용 프로그램을 느려지는 메모리 조각화 때문이지만 확실하지 않습니다. 다음은 시간이 지남에 따라 응용 프로그램의 메모리 사용의 꽤 그래프입니다 :조각난 메모리는 어떻게 생겼습니까?
fraggle rock http://kupio.com/image-dump/fragmented.png
그래프 4 개 피크 앱에 동일한 작업의 4 개 실행합니다. 나는 작업을 시작하고, 많은 양의 메모리를 할당하며, 약간 위에 앉아 (위에 평평한 선) 작업을 중단한다. 그 시점에서 System.gc()를 호출합니다. 메모리가 정리됩니다.
위에서 볼 수 있듯이 정확히 동일한 작업을 4 번 실행하는 데는 더 오래 걸립니다. 그래프의 낮은 점은 모두 같은 레벨로 돌아가므로 작업 실행 사이에 메모리 누수가없는 것처럼 보입니다.
내가 알고 싶은 것은, 메모리 조각화가 실현 가능한 설명인가, 아니면 내가 이미 많이 살펴 봤다는 것을 명심해야한다. 그래프의 낮은 점은 상대적으로 낮습니다. 따라서이 상태에서는 문제를 야기 할 수있는 작은 메모리 구멍이 많지 않으므로 메모리가 매우 세분화되지 않습니다.
j2me 메모리 할당자가 어떻게 작동하는지 모르겠으므로 실제로 알지 못합니다. 누구든지 조언 할 수 있습니까? 다른 사람이이 문제가 있었고 응용 프로그램의 메모리 프로필을 인식 했습니까?
정상적인 Java VM은 가비지 수집 작업의 일부로 힙을 압축합니다 (조각화를 제거함). J2ME에 대해서는 확실하지 않습니다 ... – bdonlan