回答編集履歴
1
項番の修正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
1
|
1
|
+
1) GCのアルゴリズムの選択肢に委ねられているためですが、なぜ委ねられているのかが疑問かと思います。
|
2
2
|
|
3
3
|
原始的なマークアンドスイープ方式のGCであれば「GCを実行する」というのは単一のタスクとしてイメージしやすいのですが、コンカレントコレクタなどとなると、アプリケーションの実行停止を最小限に抑えるためにアルゴリズムが工夫されており、アプリケーションとGCが並行して走ったりするわけですね。
|
4
4
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
このように並行してGCが走っている際に System.gc()が呼ばれたとしても「今、すでに走ってるから」となるわけで、今のGCが終わってから再度スケジューリングするのか、それともすでに走っているのだから無視するのか、といった選択肢が出てくるわけです。
|
8
8
|
|
9
|
-
2
|
9
|
+
2) 現代的なGCであれば裏で並行して走っているようなイメージで良いのではないでしょうか。
|
10
10
|
|
11
11
|
GCのアルゴリズムはいろいろとあるのですが、近年のものはStop the worldを極力起こさないように工夫されていて複雑化しています。
|
12
12
|
https://blog.cybozu.io/entry/2018/05/29/080000
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
https://docs.oracle.com/javase/jp/11/tools/java.html
|
17
17
|
|
18
|
-
3
|
18
|
+
3) あるオブジェクト X をあなたがもう使わないというつもりで破棄フラグを立てれたとしましょう。
|
19
19
|
しかし、他のオブジェクトからはオブジェクト X がまだ参照されています。何も知らない別スレッドからこのオブジェクト X が利用されたときに何が起こるべきなのでしょうか?
|
20
20
|
|
21
21
|
それとも、あるオブジェクト X を破棄するぞ、と決めた段階で、オブジェクト X への参照はすべてnullに置き換えられることが望ましいのでしょうか?
|