8

誰かが私に教えてもらえますか、どのような記憶が汚れている/常駐しているのか、そしてそれらはどこから来ているのですか?常駐メモリとは、Mac OSの「有線メモリ」と同じ意味ですか?

これは私がMacOSメモリについて見たものです:

有線:カーネルコードなどを指します。RAMから移動してはならないメモリ。常駐メモリとも呼ばれます。

共有:2つ以上のプロセス間で共有されるメモリ。どちらのプロセスもこの量のメモリを表示するため、実際に使用されているメモリの量については少し誤解を招く可能性があります。

実数:これは、task_info()によって報告されるアプリケーションの「実数」のメモリ使用量です。現在のプロセスにある物理ページ数の概算です。(RSIZE)

プライベート:これは、プロセスが独自に使用しているメモリであり、常駐メモリで使用されます。(RPRVT)

仮想:プロセス内のあらゆるものにマップされるアドレス空間の合計量(変数用の任意の大きな空間であろうとなかろうと)は、実際のVMの使用とは一致しません。(VSIZE)

アクティブ:現在アクティブとしてラベル付けされ、RAMを使用しているメモリ。

非アクティブ:「非アクティブなメモリは使用されなくなり、ディスクにキャッシュされました。別のアプリケーションがスペースを必要とするまでRAMに残ります。この情報をRAMに残しておくと、ユーザー(またはコンピューターのクライアント)が戻ってきた場合に役立ちます。後でそれに。」-MacOSXヘルプ

無料:データなしで実際に使用可能なRAMの量。

4

2 に答える 2

37

It's almost a year and I figured it out.

clean memory

clean memory are memories that can be recreated, on iOS it is memory of:

  • system framework
  • binary executable of your app
  • memory mapped files

Also notice this situation: when your app link to a framework, the clean memory will increase by the size of the framework binary. But most of time, only part of binary is really loaded in physical memory.

dirty memory

All memory that is not clean memory is dirty memory, dirty memory can't be recreated by system.

When there is a memory pressure, system will unload some clean memory, when the memory is needed again, system will recreate them.

But for dirty memory, system can't unload them, and iOS has no swap mechanism, so dirty memory will always be kept in physical memory, till it reach a certain limit, then your App will be terminated and all memory for it is recycled by system.

virtual memory

virtual memory = clean memory + dirty memory.

That means virtual memory is all the memory your App want.

resident memory

resident memory = dirty memory + clean memory that loaded in physical memory

resident memory is the memory really loaded in your physical memory, it mean all the dirty memory and parts of your clean memory.

conclusion

At any time, this is always true:

virtual memory == (clean memory + dirty memory) > resident memory > dirty memory

If you are worrying about the physical memory your App is taking(which is the key reason your App is terminated due to low memory), you should mainly focus on resident memory.

于 2013-10-08T04:05:30.283 に答える
7

Resident memory is the memory that is allocated for your app. Dirty memory is the resident memory that cannot be automatically deallocated due to the lack of a paging system in iOS. I found this information at http://liam.flookes.com/wp/2012/05/03/finding-ios-memory/. Then for the types of memory that you listed, resident memory in iOS is closer to real or private. From my understanding, it is the dirty memory that you should be most concerned about in iOS as it can determine if your app gets killed when suspended in the background if there is a low-memory condition.

于 2012-11-18T06:20:21.980 に答える