ANTS 메모리 프로파일 러를 사용하여 .NET 2.0 응용 프로그램 중 하나에서 발생하는 메모리 누수 증가를 진단하고 있습니다. 는 I 7.5 시간에 걸쳐 공정 7 스냅 가고, 여기에서 얻어진 데이터를 표 표현 -.NET 응용 프로그램 메모리 사용량 - 사용하지 않은 .NET 및 관리되지 않는 메모리 및 조각화
G1의 reprsents 생성 한 사이즈 G2 세대 2 크기. 비 관리 공간 및 개인 바이트를 제외하고 다른 모든 값은 MB입니다.
내 질문이 있습니다 -
왜 힙 크기가 낮은 경우에도 높은 사용되지 않는 .NET 공간이?
큰 개체 힙은 최대 2MB로 이동하고 마지막 3 개의 스냅 샷은 96KB로 유지됩니다. 그런데 왜 그렇게 큰 조각이 있고, 사용하지 않은 공간이 많은가?
관리되지 않는 공간이 계속 증가합니다. 시간이 지남에 따라 개인용 바이트 수가 증가 할 책임이 있습니까?
저는이 문제를 해결하기 위해 제 기지에서 왔으며 몇 가지 분석을 수행했지만 이에 대한 적절한 해결책을 찾지 못했습니다. 필요한 다른 데이터를 제공 할 준비가되었습니다.
이는 개체가 메모리에 남아있는 결과 일 수 있습니다. 어쩌면 당신은 일정한 재인식이 더 많은 메모리 공간이 할당된다는 것을 의미하므로 사용 된 모든 객체가 잘 처리되었는지 확인해야합니다. 단편화의 원인이 될 수 있습니다 –
LOH에는 개체가 거의 없습니다. 프로파일 러는 응용 프로그램이 시작된 이후에도 계속 유지되는 배열을 보여주고 다른 배열은 예상 된 일정한 간격으로 할당 및 할당 해제됩니다. – Cygnus
두 번째 어레이가 올바르게 배치 되었습니까? LOH의 GC는 매우 드문 경우입니다.가능한 시나리오는 GC 앞에 두 번째 배열이 할당되므로 가능한 시나리오는 다음과 같이 보일 수 있습니다. [1,2] (앱의 시작) [1,2,2] (두 번째 배열의 재 할당) LOH에서 GC를 얻으면 LOH는 다음과 같이 보입니다 : [1,0,0,0,0,2] 그러면 두 번째 배열을 한 번 더 할당하기 시작합니다. [1, 2,0,0,0,2] 두 번째 배열의 길이가 일정하지 않으면 상황이 더욱 악화 될 수 있습니다. 이 아이디어는 LOH에서 많은 재 할당을 허용하지 않습니다. – Alex