11

Android のガベージ コレクターについて、矛盾する情報をいくつか見つけました。

Android 開発者ガイド 言います:

Android 3.0 は、シングルコアまたはマルチコア プロセッサ アーキテクチャで動作するように設計されたプラットフォームの最初のバージョンです。Dalvik VM、Bionic ライブラリなどのさまざまな変更により、マルチコア環境での対称型マルチプロセッシングのサポートが追加されます。これらの最適化は、シングルスレッドのアプリケーションであっても、すべてのアプリケーションにメリットをもたらします。たとえば、アクティブなコアが 2 つある場合でも、Dalvik ガベージ コレクターが 2 つ目のコアで実行されている場合、シングル スレッド アプリケーションのパフォーマンスが向上する可能性があります。システムはこれを自動的に手配します。」

さて、他のこと

このリンクによると: Dalvik 仮想マシン アーキテクチャ アンドロイドは、マーク アンド スイープ アプローチを使用します。

Dalvik ガベージ コレクターの現在の戦略は、マーク ビット、つまり特定のオブジェクトが「到達可能」であるためガベージ コレクションの対象にならないことを示すビットを、他のヒープ メモリとは別に保持することです。

このリンクでマークとスイープがどのように機能するかを確認すると: マークとスイープ ガベージ コレクション アルゴリズム 、次のことがわかります。

マーク アンド スイープ アプローチの主な欠点は、ガベージ コレクション アルゴリズムの実行中に通常のプログラムの実行が中断されることです。特に、人間のユーザーと対話するプログラムや、リアルタイム実行の制約を満たす必要があるプログラムでは、これが問題になる可能性があります。たとえば、マーク アンド スイープ ガベージ コレクションを使用する対話型アプリケーションは、定期的に応答しなくなります。

だから私の質問は、それが実際にどのように機能するのかということです. ガベージ コレクターは、作業中にすべてを一時停止しますか? それとも、他のアクティブなプロセッサ コアとは完全に独立して実行できますか?

4

3 に答える 3

11

Gingerbread 以降のバージョンの Dalvik VM は、 Mostly Concurrent 部分コレクションガベージ コレクターを使用しており、一時停止時間は通常約 5 ミリ秒です。したがって、はい、GC は他のアプリを停止することで他のアプリに影響を与えていますが、同時 GC アルゴリズムはこれらの一時停止を最小限に抑えることができます。

あなたは見るべきです:

一般に、ガベージ コレクション理論[Garbage Collection Wiki]では次のように説明されています。

  • ストップ ザ ワールドガベージ コレクターは、プログラムの実行を完全に停止してコレクション サイクルを実行します。

  • インクリメンタル ガベージ コレクタとコンカレント ガベージ コレクタは、作業をメイン プログラムのアクティビティとインターリーブすることで、この中断を減らすように設計されています。インクリメンタル ガベージ コレクタは、個別のフェーズでガベージ コレクション サイクルを実行し、各フェーズ間で (場合によってはいくつかのフェーズで) プログラムの実行を許可します。

  • コンカレント ガベージ コレクタは、プログラムの実行スタックがスキャンされるときを除いて、プログラムの実行をまったく停止しません。
于 2013-02-13T00:56:13.627 に答える
2

他のアプリを一時停止することはありませんが、アプリを一時停止する可能性があります。マーク アンド スイープでは、すべての処理を停止する必要はありません。これが最も簡単な方法です。おそらく、実行を一時停止するポイントとそうでないポイントがいくつかあります。Dalvik VM のコードを確認するしかありません。そして、それがすべてのバージョンの Android で同じ答えであるとは期待できません。

于 2013-02-12T20:08:58.470 に答える
2

完全な独立はむしろ不可能です。ガベージ コレクターとプログラムは同じメモリを使用し、何らかの方法で通信する必要があります。Azul のような「一時停止のない」GC でさえ (ところで、よく読んでください: http://www.artima.com/lejava/articles/azul_pauseless_gc.html )、技術的な一時停止があります。Dalvik はおそらく (逸話的な証拠と、過去 15 年間に IBM、Sun、Oracle などによって JVM に注がれたリソースに基づく純粋な推測)、JVM で見つかった最新のテクノロジよりも数年遅れているため、一時停止はさらに長くなると思われます。 .

于 2013-02-12T20:07:29.163 に答える