복잡한 장면을 설정하기 위해 상당한 양의 메모리를 사용하는 OpenGL Android 앱이 있는데, 이로 인해 심각한 힙 조각화가 발생합니다. 메모리 누수가 없더라도 조각화로 인해 메모리가 부족한 상태에서 앱을 파괴하고 만들 수는 없습니다.Android 힙 조각화 전략?
안드로이드는 분명히 활동을 중단시키는 동일한 VM/힙에서 활동을 파괴하고 생성하는 습관을 가지고 있기 때문에 큰 문제를 야기합니다 (즉, 분열은 누설이 아닌 문제입니다).
@Override
protected void onStop() {
super.onStop();
if(isFinishing()) {
System.runFinalizersOnExit(true);
System.exit(0);
}
}
이 활동이 마무리 될 때하는 완전한 VM 종료됩니다, 따라서 다음 번에이 활동은 신선한 조각 나지 않은 힙를 얻을 시작되었는지 보장이에 대응하기위한 전략으로 나는 다음과 같은 기술을 사용했다.
참고 :이 방법은 "Android 방식"이 아니지만 가비지 수집기가 비 압축이므로 주어진 힙을 계속 재사용하는 것은 불가능합니다.
이 techinque는 실제로 일반적으로 작동하지만 비 활동 모드에서 활동이 삭제 된 다음 다시 생성되면 작동하지 않습니다.
아무도 힙 분해를 처리하는 방법에 대한 좋은 제안이 있습니까?
추가 참고 : 메모리 소비량을 줄이는 것은 실제로 옵션이 아닙니다. 액티비티는 실제로 많은 양의 메모리를 사용하지 않지만 힙 (및 원시 힙)은 아마도 일부 대형 메모리 덩어리로 인해 쉽게 조각난 것처럼 보입니다.
나는 동일한 문제가 있었고 비슷한 해결책을 사용했습니다. 정말 끔찍해. –