얻고 자하는 메모리 쿼리의 정의에 따라 다릅니다.
일반적으로 힙 메모리의 상태를 알고 싶습니다. 메모리를 너무 많이 사용하면 OOM이 발생하고 앱이 충돌하기 때문입니다.
이를 위해 다음 값을 확인할 수 있습니다.
final Runtime runtime = Runtime.getRuntime();
final long usedMemInMB=(runtime.totalMemory() - runtime.freeMemory()) / 1048576L;
final long maxHeapSizeInMB=runtime.maxMemory() / 1048576L;
final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;
"usedMemInMB"변수가 "maxHeapSizeInMB"에 가까워 질 availHeapSizeInMB
수록 0에 가까울수록 OOM이 가까워집니다. (메모리 조각화로 인해 0에 도달하기 전에 OOM이 발생할 수 있습니다.)
그것은 또한 메모리 사용량의 DDMS 도구가 보여주는 것입니다.
또는 전체 시스템이 사용하는 실제 RAM 사용량 이 있습니다.이를 계산 하려면 허용 된 답변 을 참조하십시오 .
업데이트 : Android O는 앱이 기본 RAM (적어도 메모리 사용량이 큰 주된 이유 인 Bitmaps 저장소의 경우)을 사용하도록 만들기 때문에 힙뿐만 아니라 상황이 변경되었으며 OOM이 줄어들 기 때문입니다. 힙에 더 이상 비트 맵이 포함되어 있지 않습니다. 여기 에서 확인 하십시오 ).하지만 메모리 누수가 의심되는 경우에도 메모리 사용을 주시해야합니다. Android O에서 이전 버전에서 OOM을 유발해야하는 메모리 누수가있는 경우 잡을 수없는 상태에서 충돌이 발생하는 것 같습니다. 메모리 사용량을 확인하는 방법은 다음과 같습니다.
val nativeHeapSize = Debug.getNativeHeapSize()
val nativeHeapFreeSize = Debug.getNativeHeapFreeSize()
val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize
하지만 그래프를 사용하여 실시간으로 데이터를 보여주는 IDE의 프로파일 러를 사용하는 것이 가장 좋습니다.
따라서 Android O의 좋은 소식은 너무 많은 큰 비트 맵을 저장하는 OOM으로 인해 충돌이 발생하기가 훨씬 더 어렵다는 것입니다. 그러나 나쁜 소식은 런타임 중에 이러한 경우를 포착 할 수 없다고 생각한다는 것입니다.
편집 : Debug.getNativeHeapSize()
앱의 총 최대 메모리를 보여주기 때문에 시간이 지남에 따라 변경되는 것 같습니다 . 따라서 이러한 함수는 앱이 얼마나 많이 사용하고 있는지 보여주기 위해 프로파일 러에만 사용됩니다.
실제 총 및 사용 가능한 기본 RAM을 얻으려면 다음을 사용하십시오.
val memoryInfo = ActivityManager.MemoryInfo()
(getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).getMemoryInfo(memoryInfo)
val nativeHeapSize = memoryInfo.totalMem
val nativeHeapFreeSize = memoryInfo.availMem
val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize
Log.d("AppLog", "total:${Formatter.formatFileSize(this, nativeHeapSize)} " +
"free:${Formatter.formatFileSize(this, nativeHeapFreeSize)} " +
"used:${Formatter.formatFileSize(this, usedMemInBytes)} ($usedMemInPercentage%)")
Debug.getNativeHeapFreeSize()
.