DalvikランタイムとARTランタイムの具体的な違いを理解しようとしています。ARTがDalvik VMを使用していないことに気づきましたが、Android Lプレビューのインストール後に最初に気付いたのは、zygoteプロセスがまだ実行中であることです。彼らがDalvik VMを本当に取り除くなら、それはzygoteプロセスを役に立たないのではないでしょうか?さらに、AOSP経由でリリースされたソースコードを検査したところ、Dalvikの大部分がまだ残っています。
DalvikランタイムとARTランタイムの具体的な違いを理解しようとしています。ARTがDalvik VMを使用していないことに気づきましたが、Android Lプレビューのインストール後に最初に気付いたのは、zygoteプロセスがまだ実行中であることです。彼らがDalvik VMを本当に取り除くなら、それはzygoteプロセスを役に立たないのではないでしょうか?さらに、AOSP経由でリリースされたソースコードを検査したところ、Dalvikの大部分がまだ残っています。
回答:
Zygoteは、Dalvikと実際に結びついているわけではなく、単なる初期化プロセスです。Zygoteは、Androidがアプリを起動するために使用する方法です。新しいプロセスを最初から開始する必要はなく、アプリを起動するたびにシステム全体とAndroidフレームワークを新たにロードするのではなく、そのプロセスを一度実行してから、Zygoteがアプリ固有の処理を行う前にその時点で停止します。 。次に、アプリを起動するときに、Zygoteプロセスが分岐し、子プロセスは中断したところから続行して、アプリ自体をVMにロードします。
このメソッドは元々Dalvik用に設計されましたが、ARTがまったく同じように動作しないはずがある理由はありません。アプリの実行中にアプリをJITコンパイルする必要はありませんが、アプリに依存しない多くのJava要素(つまり、Androidフレームワーク全体)をロードする必要があるため、同じfork-when-を使用するのは理にかなっています新しいプロセスを開始するためにロードされたメソッド。
大規模なプロジェクトでは当然のことですが、ダルビック後の世界でまだ有用なDalvikの残りが存在するので、元々その一部または目的で記述された他のコードがあることに驚かないでください。 Dalvikで作業します。これは、ARTがまだ使用していることです。