5

Jikes RVMは、Java Java(MMTK)で書かれたアロケータ/コレクタを持っているようです。管理された言語でメモリマネージャを書きますか?

ガベージコレクタでガベージコレクタを実行する必要がある場合、どのように動作しますか?コードを見ると、MMTKはJavaの特定のサブセットに限定されていませんでしたが、マネージメモリを割り当てるためのコードが実行するためにマネージメモリを割り当てる必要がある場合は、それが爆発するまで再帰的な回転。

しかし明らかにMMTKが動作し、明らかにいくつかの他のプロジェクトもそれを使用しています。どのようにJavaのような管理された言語でメモリアロケータとGCを書くことも可能ですか?

+0

実際の答えはソースコードにあります...そのため、Jikesのソースコードを取得し、内部で検索してください。 –

+3

私はそれをしました。それは巨大なプロジェクトですが、私は具体的な啓示は見つかりませんでした。これは、「JVMはどのように機能しているのですか?」と「HotSpotリポジトリをダウンロードしてグロッピングを開始する」という回答に似ています。 –

+0

MMTKに関する話を聞いたことがあります。基本的にはプログラムジェネレータです。あなたは彼らの論文を読んで、著者に尋ねることもできます... –

答えて

1

これが実行されている例がかなりあります。私はJikesの実装に精通していませんが、私はJavaベースの設計とPyPyの両方を読んでいました。ほとんどの人が共通しているのは、実行時/インタプリタレベルとアプリケーションレベルの2つのレベルに分けることです。各レベルには独自のオブジェクト、例外、実行フローなどがあります。

抽象的に考えると、実際には分かりやすくなります。ランタイム層は、メモリ管理されているかどうか、低レベルまたは高レベル、命令的または機能的に書き込まれている可能性があります。それは本当に問題ではありません。重要なのは、それが機能していることです。最終的にマシンコードに変換され、すべてのマシンコードはマシンと同じです。このコードは、オペコードとデータを入力として受け取り、それに基づいて事前定義されたアクションを実行し、リソースを管理します。

アプリケーション層は、これらのオペコードに含まれています。アプリケーション層は、入力を受け取り、処理し、出力を行う別の全体的な機能を表す。これらのステップには、メモリ管理ルーチンが組み込まれている場合もあります。ランタイムは、オペコードが有効で、実行するだけでオペコードが何をしているかは気にしません。理論的には、GC言語を含むGC言語を記述することができます。これは、ENIACの速度に達するまで続きます。 ;)

私は、Jikesのようなデザインの差別化要因が効率(時には柔軟性)であると言います。 GC、インタプリタ、またはランタイムをGC言語で記述するだけでは不十分です。結果は使用可能でなければならず、これはしばしば速度を意味します。アプリケーション層でのネイティブコード統合を処理するための準備が必要な場合もあります。実際の作業のほとんどはそのようなものに入ります。 GC言語でGCを実行するのは本当に簡単です:基本的には異なる抽象度でオブジェクトにラベルを付けて管理するだけです。

注:GC言語とGCベースのランタイムをコード化すると、パフォーマンスとシンプルさを高めるためにこれを利用できます。たとえば、2つの完全なガベージコレクタを稼働させる代わりに、1つのガベージコレクタを上に配置する代わりに、上に薄いGCを配置して、よりスマートなGCを下に配置することができます。よりスマートなGCは、ランタイムとアプリケーションレベルの違いを認識し、それらを別々に操作し、不適切なミキシングを行わないようにします。トップGCのほうが基本的には、メインGCやラベルオブジェクトへのプロシージャコールは、メインGCが理解できる方法で行うだけですが、それはオーバーヘッドの大部分を追加しません。

これらのプロジェクトについてのことは、それぞれ少し違っています。ターゲットとインプリメンテーション言語の性質は、設計の選択肢を大きく左右します。問題の解決方法を創造する機会がたくさんあります。

0

どちらの回答が欲しいですか?
- 「これは単なるブートストラッププロセスです。何が大したのですか?」
または
- 「これは魔法です(つまり、現在理解されている技術よりも高度な技術です。labouriously紙テープブートストラップ一tedious-を作成する午後を費やしてきたものに?書かれた最初のオペレーティングシステムだったどのように)」最初Cコンパイラが書き込まれた

、これを取得、C。トグルスイッチとコンソールライト(18ビットDEC PDP-15上)を使用してもう1ビットの後にもう一度を入力してください。これ以上のミステリーはありません。ツールキットがアプリケーションを構築するのに十分であるまで、複雑さが増していきます。

+2

私はこの質問に詳しい詳細を探しています。私は自己ホスティングコンパイラを書く方法を知っており、私はブートストラップのプロセスに精通しています。しかし、コンパイラのようなコンパイル時の依存関係とはかなり異なるガベージコレクタのような実行時依存性がある場合、ブートストラップがどのように動作するのかわかりません。 –

関連する問題