ガベージコレクタはゴミを検出しますか? [閉まっている] -- java フィールド と garbage フィールド と collectors フィールド 関連 問題

How garbage collector detects garbage? [closed]












1
vote

問題

日本語

この質問を改善したいですか?このPOST の編集によってのみ1つの問題に焦点を当てているため、質問を更新するため

閉じられた 6年前

この質問を改善します

誰かが私のメモリのどの部分が「ゴミ」のどちらの部分を理解しているのかを簡単な言葉で説明することができますか?

ガベージコレクターが実際にやっているのかを知っていますが、「穴あけ」を識別する方法は?

英語

Can someone explain me with simple words how a JAVA garbage collector understands which part of memory is a ''garbage''?

I know what a garbage collector is actually doing but how identifies the ''garbages''?

</div
        
   
   

回答リスト

1
 
vote
vote
ベストアンサー
 

Java仮想マシンでは、すべてのデータが入力され、これはJVMが他のデータとの参照を区別できることを意味します。他のデータとの参照を区別できることは、ガベージコレクションが可能であるためにほぼ必要な要件です。

ガベージコレクタは、レファレンスを検索して、ヒープ、スタック、および定数プールを横断します。通常、参照されているすべてのオブジェクトはマークされています。その後、マークされたオブジェクトは参照のためにトラバースされ、参照されているオブジェクトは順番にマークされています。

続いていない参照が残っていない場合は、マークされていないすべてのオブジェクトがアクセスできないことで配置できないことがわかります。

これはおそらくマーク&スイープガベージコレクタと呼ばれるガベージコレクションの最も基本的な形式です。

Java規格はガベージコレクタの存在を必要としないことに注意してください。標準を実装するJVMは、決してメモリを解放することもできませんでした。

 

In the Java Virtual Machine, all data ist typed, which means the JVM can distinguish references from other data. Being able to distinguish references from other data is an almost necessary requirement for garbage collection to be possible.

The garbage collector traverses the heap, the stack and the constant pool, searching for references. Normally, all referenced objects are marked. Then the marked objects are traversed for references, and the referenced objects are in turn marked.

When there are no non-followed references left, you can be sure that all objects that are not marked are no longer accessible and can be disposed.

This is probably the most basic form of garbage collection, called a mark-and-sweep garbage collector.

Note that the Java standard does not require the existence of a garbage collector. A JVM implemententing the standard could as well never free any memory.

</div
 
 
 
 
3
 
vote

多くの戦略がありますが、一般に、(GCルートと呼ばれる特別なオブジェクトから起動することによって)オブジェクトグラフを横断し、グラフ内で見つけることができるオブジェクトをマークします。マークされていないヒープ内のオブジェクトは、オブジェクトグラフ内の他のオブジェクトから到達できないため、本質的にゴミです。

より詳細な扱いのために、 JVMのガベージコレクターとこの記事

 

There are many strategies, but in general it traverses the object graph (by starting from special objects which are called GC roots) and marks those objects that it can find within the graph. Any object in the heap that hasn't been marked is essentially garbage since it is unreachable from any other object in the object graph.

For a more-detailed treatment, take a look at Oracle's documentation on the JVM's garbage collector and this article.

</div
 
 
0
 
vote

ここでは百答があるがあれば、多分単純なものはありません - これを説明する複雑な方法がたくさんあります:)。この質問が重複する前にそれを見ることができるように試してみるよ。

  1. あなたが目に見える窓やそのような「欲しい」ことを知っているものを取ります アクティブスレッドより複雑な答えの中でこれらのことの明確なリストがあります。
  2. それはこれらの重要なポイントをevertyhingのリストにします。
  3. それは他のすべてを削除します。
 

There has to be a hundred answers here but maybe none are simple--There are a lot of complicated ways to explain this :). I'll give it a try so you can see it before this question is marked duplicate.

  1. It takes things that it knows you "Want" like a visible window or an active thread. There is a clearly specified list of these things in more complicated answers.
  2. It makes a list of evertyhing these important points can possibly access.
  3. It deletes everything else.
</div
 
 

関連する質問

34  Java 8 'Collector'クラスがこのように設計されているのはなぜですか?  ( Why is the java 8 collector class designed in this way ) 
Java 8を知っているNew Stream APIと<コード> EmailsID4 は、データストリームの集計/収集方法を定義するためのインタフェースです。 しかし、コレクタインタフェースはこのように設計されています。 <事前> <コード> EmailsI...

1  Javaストリームを蓄積し、その後プロセスするだけです  ( Accumulate a java stream and only then process it ) 
私は次のように見えた文書を持っていました: data.txt <事前> <コード> insert into mylistofitems (listid, itemid, itemdesc, quantity) values (1, 1000, 'apple...

6  Webアプリとして実行されると、同じコンパレータが単位テストと異なる動作が異なるのですか?  ( Why is the same comparator acting differently in unit tests vs when run as a we ) 
tl; DR:多くの試行錯誤の後、問題がTomcat関連のように、Java言語自体ではなく、設定されたJavaバージョンについてのように見えます。詳細については、以下の「編集3」を参照してください。 私は今やこんにちはこの種の行動を見たことがないので、私は前...

0  ループをJavaストリームに変換しますか?  ( Convert two for loops to java stream ) 
私は現在ストリームを使用することを学んでいるので、ストリームを使用するように変換したいループのネストされたループを持っています、どうやってそうすることができますか? 私は以下の現在の試みを追加しましたが、現在不完全です。 <事前> <コード> functio...

-1  オブジェクトをJava 8ストリームで変換します  ( Convert object with java 8 stream ) 
私はこの2つのオブジェクトを持っています: <事前> <コード> public class Service { private String cod; private String name; private String table;...

71  どのようなリスト<e>がcollectors.tolist()を返しますか?  ( What kind of liste does collectors tolist return ) 
私は読んでいます Lambda:Libraries Edition 、および1つの声明に驚かれています: セクションの下でストリームの下には、次のものがあります。 <事前> <コード> List<Shape> blue = shapes.stream() ...

42  PartitioningByの目的は何ですか  ( Whats the purpose of partitioningby ) 
例えば、いくつかの要素を分割するつもりなら、私は次のようなことをすることができます: <事前> <コード> Stream.of("I", "Love", "Stack Overflow") .collect(Collectors.partition...

1  ダウンストリームコレクターを持つ分割ビリーは、予期しない結果を生み出しました  ( Partitioningby with a downstream collector produced an unexpected result ) 
テストプログラムを持っています: <事前> <コード> public class App { public static void main(String[] args) { List<Integer> a = Arrays.asL...

2  1つの地図に地図の集まりをストリーミングします  ( Stream a collection of maps into a single map ) 
地図の集まりを持っています。内部マップには一致するキーがありますので、 Collection :の Map にしたいです。 <コード> Collection<Map<String, Thing>> =&gt; <コード> Map<String, Colle...

367  Collectors.TomapのJava 8 NullPointerException  ( Java 8 nullpointerexception in collectors tomap ) 
Java 8 <コード> Collectors.toMap は、値の1つが 'null'の場合、 NullPointerException をスローします。私はこの現象を理解していません、マップに問題なくNULLポインタを値として含めることができます。 <コ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有