問題タブ [mark-and-sweep]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C で Mark Sweep ガベージ コレクターを実装する
私はガベージコレクタを実装しなければならないCでこの問題を抱えています。完了するために 4 つの関数が与えられたという事実に固執しており、それらが互いにどのように接続されているかわかりません。どうすればいいのかわからない。これは私がこれまでに持っているものです:
java - マークアンドスイープと自動参照カウント
ご存じのように、 HotSpot JVM は並行マーク アンド スイープガベージコレクターを使用して、ヒープ上の未使用オブジェクトを解放します。これは、プログラマーがプログラムの作成中にメモリを処理する必要がないという意味で便利ですが、未使用のオブジェクトをすべて解放する「GC ラグ」が時折発生します。
同様に、新しいSwiftプログラミング言語も、自動参照カウントで動作するARCと呼ばれる自動メモリ管理システムを利用します。この種のガベージ コレクションの問題は循環参照です。これは、メモリ リークを回避するためにプログラマが参照を使用して特別に処理する必要があります。weak
unowned
しかし、この 2 つの間に他に重要な違いはありますか? あるシナリオが他のシナリオよりも優れている、または劣っているシナリオはどれですか?
java - GC は、GC サイクル中に新しく作成されたメモリ/オブジェクトのクリーンアップをどのように停止しますか (Java/C#)
以下のようなサンプルコードを考えてみましょう
上記のコードでは、従業員オブジェクトのヒープ メモリの割り当てが最初に行われ、次にその参照がスタック参照に割り当てられると想定していますe
。
上記は有効ですか、それともここで何か深いことが起こりますか?
はいの場合、ヒープにメモリが作成された直後、その参照が に割り当てられる直前にe
、GC が起動し、GC ルートからこの新しいヒープ メモリへの参照がないことを確認します。
- GC はこのリソースをクリーンアップしますか?
- JVM/CLR がこれらのシナリオを処理し、この種のメモリ破損を回避する方法はありますか?
Java と C# の両方にタグを付けると、Java と C# の両方の Mark and Sweep の場合のクリーンアップのロジックはほぼ同じように見えます (少なくとも、未使用のオブジェクトをルートから識別してクリーンアップするという点では)。
javascript - ガベージ コレクションに Mark and Sweep Algorithm を使用する最新のブラウザはどれですか?
ガベージ コレクションを行っているときにReference Counting
、Mark & Sweep
GC アルゴリズムに出会いました。
Web に関するいくつかの調査によると、参照カウントは過去のものであり、今日のほとんどのブラウザーは Mark and Sweep を採用しています。ここの記事の通り
同じことに関する標準的なドキュメントは見つかりませんでしたが、次のことを知りたいと思っています。
- 循環依存以外に、参照カウントから離れてマーク & スイープを採用した理由はありますか?
- 最新のブラウザー (Chrome | Firefox | Safari | Edge | IE) はすべて Mark and Sweep を使用していますか?