2017-04-17 17 views
0

私が関与する限り、バイトコードを処理するすべての仮想マシンは、例としてJVMを使用し、(バイトコードを実行している)VMの現在の状態を何らかの形で分析して独自のガベージコレクタを実装し、ヒープから。今、私はそれが事前のコンパイルになると全く混乱しています。つまり、アプリケーションを最初に起動する前に、バイトコード全体がネイティブコードにコンパイルされることになります。だから...アプリケーションが起動されると、プロセッサはネイティブコードを実行し、それがそれです。とにかく、バイトコード全体がネイティブにコンパイルされていれば、VMはどこに入りますか? GCはどこに入ってきますか?それは何を分析しますか? 私の全知識には完全に欠陥があるかもしれません、もしそうなら、いくつかの良い記事をお勧めします。私は多くを読んだので、これを理解できません...私は狂ってしまいます!Android ARTのガベージコレクションはどのようにできますか?

+0

YouTubeでART関連するGoogle IOのビデオを見ている?:https://youtu.be/EBlTzQsUoOwとhttps://youtu.be/fwMM6g7wpQ8 –

+0

もっと読み:[LLVMとガベージコレクションを] (http://llvm.org/docs/GarbageCollection.html) – rici

+0

@riciはLLVM GCではなく、実装ではありませんか? –

答えて

0

ARTは、アプリケーションのバイトコードのネイティブ命令への変換を実行します。ネイティブ命令は、後でデバイスのランタイム環境で実行されます。 ランタイム環境には独自のガベージコレクタがあります。あなたがアプリにメモリが必要な場合は、Android OSからではなくRuntime環境から要求されます。

あなたのアプリは仮想マシンで構築されていると考えることができます。この仮想マシンは、実行時環境です。

P.S.あなたはGoogle presentation about ARTを見ましたか?

image

+0

したがって、ランタイムは先にコンパイルされたネイティブコードから来たコードを "実行"し、gcはこの特定のランタイムの一部ですか?私はビデオを見ましたが、面白い情報がいくつかありましたが、私の質問には答えられませんでした:( – AdamK

+0

はい、それは私が言いたいことです。バイナリこのバイナリはGCでビルドされます。 – BayK

関連する問題