메모리 관리 메커니즘
메모리 관리 메커니즘 개요
운영 체제의 관점에서 메모리는 데이터 저장 영역이며 운영 체제에서 동원할 수 있는 자원입니다. 오늘날의 다중 프로세스 운영 체제에서는 메모리 관리가 매우 중요합니다. 운영체제는 각 프로세스에 메모리 자원을 합리적으로 할당합니다. 여기서는 메모리 관리 메커니즘이 무엇인지 두 가지 관점에서 분석하겠습니다.
1. 할당 메커니즘
운영 체제는 각 프로세스가 정상적으로 실행될 수 있도록 각 프로세스에 합리적인 크기를 할당합니다. 메모리가 부족하거나 특정 프로세스가 메모리를 너무 많이 차지하는 것이 아니라 운영체제에서 할당하는 개념이다.
2. 재활용 메커니즘(운영 체제에서 특히 중요한 부분임)
시스템 메모리가 부족하면 메모리 리소스를 재활용하고 재분배하는 메커니즘이 있으므로 새로운 프로세스가 정상적으로 실행될 수 있도록 보장할 수 있습니다. 재활용할 때 메모리를 차지하는 프로세스를 종료해야 하므로 운영 체제는 부작용을 최소화하기 위해 이러한 프로세스를 종료하는 합리적인 메커니즘을 제공해야 합니다. PC버전과는 다릅니다. 안드로이드는 모바일 운영체제라는 것은 모두가 알고 있는 사실이다. 일반적으로 안드로이드는 PC보다 메모리 자원이 적기 때문에 메모리 관리를 더욱 주의 깊게 해야 한다.
2 Android 메모리 관리 메커니즘
1. 할당 메커니즘
우리는 Android가 각 프로세스에 메모리를 할당할 때 유연한 할당 방법을 사용한다는 것을 알고 있습니다. 예를 들어 , 처음에는 새로운 앱에 너무 많은 메모리 공간을 할당하지 않고 각 앱 프로세스에 소량의 메모리를 할당하며, 이 양은 앱이 계속해서 성장함에 따라 각 모바일 장치의 물리적 크기를 기준으로 결정됩니다. 실행해 보면 현재 메모리가 더 이상 충분하지 않다는 것을 알 수 있습니다. 이때 Android는 각 프로세스에 추가 크기를 할당하지만 할당되는 추가 메모리 크기에는 제한이 없다는 점에 유의해야 합니다. 배포할 수 있습니다. Android의 메모리 크기는 제한되어 있다는 것을 우리 모두 알고 있기 때문에 시스템이 각 APP 프로세스에 무제한 메모리를 할당하는 것은 불가능합니다.
요약: Android 할당 메커니즘의 최대 범위는 더 많은 프로세스가 사용자가 다음에 다시 시작할 때 프로세스를 다시 생성할 필요가 없으며 기존 프로세스만 복원하면 되므로 애플리케이션 시작 시간이 단축되고 사용자 경험이 향상됩니다.
2. 재활용 메커니즘
Android의 메모리 사용은 활용도를 극대화하는 것입니다. 이는 Linux의 특성을 물려받았으며, Android 시스템은 메모리에 최대한 많은 데이터를 저장합니다. 여기에도 단점이 있습니다. 예를 들어 일부 프로세스는 더 이상 사용되지 않지만 데이터는 여전히 메모리에 저장되어 있으므로 Android는 현재 애플리케이션을 직접 종료하는 것을 권장하지 않습니다. 이 경우 사용자가 다음에 애플리케이션을 시작할 때 새 프로세스를 생성하지 않고 현재 프로세스만 복원하면 됩니다. Android는 메모리가 충분하지 않음을 발견하고 메모리를 회수하기 시작하면 Android는 다른 프로세스를 종료합니다. 새로운 프로세스를 시작하기에 충분한 메모리를 회수합니다. 여기서 그는 프로세스 할당에 대한 우선순위 개념을 가지고 있습니다.
우선순위는 주로 5단계로 구분됩니다.
? 첫째: 전경 프로세스, 화면에 표시되는 프로세스 둘째: 더 이상 전경 프로세스가 아니지만 여전히 사용자가 볼 수 있는 프로세스입니다. 알람시계 등등.. 넷째: 백그라운드 프로세스는 서비스 프로세스와 다릅니다. 백그라운드에서 일부 계산을 처리하는 프로세스입니다. 다섯째: 메모리에서 아무것도 실행되지 않는 프로세스입니다. 메모리는 언제든지 회수될 수 있습니다.
3. Android에 이러한 5가지 레벨이 있는 이유는 무엇입니까?
답변: 프로세스 우선순위가 낮을수록 메모리 재활용 가능성이 높아지기 때문입니다
1? 예를 들어 포그라운드 프로세스, 가시적 프로세스 및 서비스 프로세스는 일반적인 상황에서는 종료되지 않습니다. 2. 백그라운드 프로세스: LRU(가장 진보되고 가장 적게 사용되는) 캐시인 캐시 목록에 저장됩니다. 메커니즘. 먼저 종료되는 프로세스가 목록의 끝에 있게 됩니다(즉, 가장 최근에 사용된 백그라운드 프로세스가 먼저 종료됩니다).
3. 빈 프로세스: 전체 시스템의 성능 균형을 맞추기 위한 것입니다. 안드로이드는 이러한 프로세스를 저장하지 않습니다.
4. 재활용 효율성의 개념은 무엇인가요?
답변: 언제 Android는 프로세스를 종료하기 시작합니다. Android는 더 많은 메모리를 재활용할 수 있는 프로세스를 종료하는 것을 선호하기 때문에 프로세스가 종료되면 시스템은 각 종료로 인한 재활용 이점을 판단합니다. 물론, 우리는 여전히 더 적은 수의 프로세스를 종료하여 사용자 경험에 미치는 영향을 줄이기를 희망합니다.
5. 메모리 관리 메커니즘의 목표를 따릅니다.
답변: 프로젝트를 개발할 때 APP에 대한 메모리 목표를 설정합니다. 이 목표에는 다음 사항이 있습니다.< /p >
? 1. 더 적은 메모리를 차지합니다. 앱의 성능이 향상되면 사용자의 휴대폰에 더 적은 메모리가 사용된다는 것은 모두가 알고 있는 사실입니다. 이는 사용자 경험을 위한 좋은 목표입니다. 2. 적절한 경우 시스템 리소스를 합리적으로 해제합니다. (필요하지 않은 것이 즉시 재활용된다는 의미는 아닙니다. 객체를 자주 해제하면 메모리 지터가 발생하고 메모리 지터로 인해 UI 정지, anr, 심지어 oom과 같은 많은 나쁜 현상이 발생합니다) 3. 시스템 메모리가 부족한 경우 Android 시스템에 사용 가능한 메모리를 제공하기 위해 중요하지 않은 리소스 대부분을 해제할 수 있습니다. 4. 시스템이 애플리케이션을 올바르게 복원할 수 있도록 특별한 수명 주기에 중요한 데이터를 합리적으로 저장하거나 복원할 수 있습니다.
6. 메모리 최적화 방법.
답변: 프로젝트를 개발할 때 APP에 대한 메모리 목표를 설정합니다. 이 목표에는 다음 사항이 있습니다.
1. 서비스가 작업을 완료하면 ? 그것을 멈추기 위해. 우리는 서비스 프로세스 우선순위가 상대적으로 낮다는 것을 알고 있으며, 그 우선순위를 서비스 프로세스라고 합니다. 따라서 이는 메모리 재활용에 영향을 미칩니다. 여기서는 필요한 작업을 완료하기 위해 Service를 IntentService로 대체할 수 있습니다.
두 가지 이점이 있습니다.
첫 번째 요점: IntentService가 Service를 상속하고 서비스이기도 하지만 Service가 기본 스레드로 기본 설정된다는 점을 알고 있습니다. , 따라서 서비스는 시간이 많이 걸리는 작업을 수행할 수 없습니다. 내부적으로 하위 스레드를 시작하므로 onHandleIntent 메서드에서 시간이 많이 걸리는 작업을 수행할 수 있습니다.
두 번째 사항: IntentService가 실행된 후 자동으로 중지되며, 중지하려면 서비스를 수동으로 호출해야 합니다. 서비스가 종료되지 않으면 메모리 누수가 발생합니다. 2. UI가 보이지 않는 경우 UI에서만 사용하는 일부 리소스를 해제합니다. 3. 시스템 메모리가 부족할 경우 중요하지 않은 리소스를 최대한 해제합니다. 4. 비트맵을 남용하여 리소스를 낭비하지 마십시오. (현재 해상도에 맞게 비트맵을 압축하는 것이 최선의 선택입니다. 사용 후 C 메모리에서 비트맵의 메모리를 해제하려면 recycle 메소드를 호출해야 합니다. 또한 소프트 참조를 사용하여 비트맵을 참조한 후 lru 캐시를 사용할 수도 있습니다. ) 5. 메모리 최적화된 데이터 컨테이너를 사용하고 일반 상수보다 두 배 이상 메모리를 소비하는 열거형 상수를 사용하지 마세요. : 예를 들어 프로젝트 개발 과정에서 ButterKnife와 같은 많은 주입 프레임워크를 사용하게 됩니다. 이러한 종속 프레임워크를 사용하면 이점이 있지만 추가 서비스도 제공됩니다. 7. 포지셔닝, 푸시, WebView 등 여러 프로세스를 사용하는 경우 백그라운드 프로세스를 작성하여 실행할 수 있습니다. 특히 Webview는 프로세스를 시작하지 않으면 메모리 누수를 발생시킵니다.