newLisp -- Traditional automatic memory management (Garbage Collection)
Traditional automatic memory management (Garbage Collection)
古典的な自動メモリ管理(ガベージコレクション)
In most programming languages, a process registers allocated memory, and another process finds and recycles the unused parts of the allocated memory pool. The recycling process can be triggered by some memory allocation limit or can be scheduled to happen between evaluation steps. This form of automatic memory management is called Garbage Collection.
ほとんどのプログラミング言語で、あるプロセスは割り当てられたメモリを登録する、そして他のプロセスは割り当てられたメモリプールの使用されなくなた部分を見つけて再利用します。
再利用するプロセスはいくつかのメモリ割り当てが限界に達することによって引き起こされるか、評価ステップの間に起こるように予定することができます。
この自動メモリ管理の形はガベージコレクションと呼ばれます。
Traditional garbage collection schemes developed for LISP employed one of two algorithms1:
古典的なガベージコレクションの仕組みはLISPのために開発された2つのアルゴリズムの一つを採用しました:
(1) The mark-and-sweep algorithm registers each allocated memory object. A mark phase periodically flags each object in the allocated memory pool. A named object (a variable) directly or indirectly references each memory object in the system. The sweep phase frees the memory of the marked objects when they are no longer in use.
(1)マークアンドスウィープアルゴリズムは割り当てられた各メモリオブジェクトを登録します。
マークフェーズは定期的に割り当てられたメモリプールの各オブジェクトにフラグを立てます。
名前の付けられたオブジェクト(変数)は直接的または間接的にシステムの各メモリオブジェクトから参照されます。
スウィープフェーズはそれらがもはや使用されていないときマークされたメモリを開放します。
(2) A reference-counting scheme registers each allocated memory object together with a count of references to the object. This reference count gets incremented or decremented during expression evaluation. Whenever an object's reference count reaches zero, the object's allocated memory is freed.
(2)参照カウントの仕組みはそのオブジェクトへの参照の数と共に割り当てられた各メモリオブジェクトを登録します。
この参照カウントは式の評価の間にインクリメントまたはデクリメントされます。
オブジェクトの参照カウントが0になったときはいつでも、そのオブジェクトに割り当てられたメモリは開放されます。
Over time, many elaborate garbage collection schemes have been attempted using these algorithms. The first garbage collection algorithms appeared in LISP. The inventors of the Smalltalk language used more elaborate garbage collection schemes. The history of Smalltalk-80 is an exciting account of the challenges of implementing memory management in an interactive programming language; see [Glenn Krasner, 1983: Smalltalk-80, Bits of History, Words of Advice]. A more recent overview of garbage collection methods can be found in [Richard Jones, Rafael Lins, 1996: Garbage Collection, Algorithms for Automatic Dynamic Memory Management].
長い間に、これらのアルゴリズムを使用してたくさんの複雑なガベージコレクションの仕組みが試みられてきました。
最初のガベージコレクションアルゴリズムはLISPに現れまsmalltalk言語の考案者はさらに複雑なガベージコレクションの仕組みを使用しました。
Smalltalk-80の歴史は面白いインタラクティブなプログラミング言語のメモリ管理の実装の挑戦といえます:[Glenn Krasner, 1983: Smalltalk-80, Bits of History, Words of Advice]を参照。
より最近のガベージコレクションの方法の概要は[Richard Jones, Rafael Lins, 1996: Garbage Collection, Algorithms for Automatic Dynamic Memory Management]に見つけることができます。
>> Automatic Memory Management in newLISP
>> Traditional automatic memory management (Garbage Collection)
>> One reference only, (ORO) memory management
>> Performance considerations with value-passing
>> Memory and datatypes in newLISP
>> Implementing ORO memory management
0 件のコメント:
コメントを投稿