teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

Perlについて調べたことを反映

2016/04/15 13:24

投稿

raccy
raccy

スコア21767

title CHANGED
File without changes
body CHANGED
@@ -18,8 +18,8 @@
18
18
  |C#(.NET Framework)|[×](https://blogs.msdn.microsoft.com/brada/2005/02/11/resource-management/)|[世代別GC](https://msdn.microsoft.com/ja-jp/library/ee787088(v=vs.110).aspx)|
19
19
  |C#(Mono)|__不明__|__不明__|
20
20
  |Erlang|__不明__|__インクリメンタルGC?__|
21
- |Perl5|__○?__|__不明__|
21
+ |Perl5|[__○__](http://stackoverflow.com/questions/2972021/garbage-collection-in-perl)|[__×__](http://stackoverflow.com/questions/2972021/garbage-collection-in-perl)|
22
- |Perl6(Rakudo)|__不明__|__不明__|
22
+ |Perl6(MoarVM)|__不明__|[世代別GC](http://www.moarvm.org/features.html)|
23
23
  |Python(CPython)|[○](http://docs.python.jp/3/extending/extending.html#reference-counts)|[世代別GC](http://docs.python.jp/3/library/gc.html#module-gc)|
24
24
  |PHP|[○](http://php.net/manual/ja/features.gc.refcounting-basics.php)|[M&S](http://php.net/manual/ja/features.gc.collecting-cycles.php)|
25
25
  |Ruby(MRI)|×|[世代別GC+インクリメンタルGC](https://www.ruby-lang.org/ja/news/2014/12/25/ruby-2-2-0-released/)|
@@ -37,6 +37,7 @@
37
37
  ※ その他、この言語はこれを使っているという情報があれば教えて下さい。
38
38
  ※ Java8にはインクリメンタルGCもあるようですが、非推奨になっています。
39
39
  ※ Rustの参照カウントは標準ライブラリとして提供されます。
40
+ ※ MoarVMはPerl6のVM。RakudoもMoarVMを使っているはず。
40
41
 
41
42
  間違い等があれば、ご指摘下さい。「無い」ことを証明するのは悪魔の証明になり得るため、しばらくして指摘が無ければ、不明部分は「×」にしていきたいと思います。世代数も調べていった方が良いかちょっと悩んでいます(世代別GCでは無い場合は1世代しかないという扱いをするとか)。
42
43
 

6

D追加、ついでに言語をネイティブ->VM->インタプリンタ順にした

2016/04/15 13:24

投稿

raccy
raccy

スコア21767

title CHANGED
File without changes
body CHANGED
@@ -7,11 +7,17 @@
7
7
  |---|:---:|:---:|
8
8
  |C|×|×|
9
9
  |C++(スマートポインタ)|[○](http://en.cppreference.com/w/cpp/memory/shared_ptr)|×|
10
+ |D|__不明__|[世代別GC](http://dlang.org/spec/garbage.html)|
11
+ |Go(gc)|__不明__|[__よくわからない、解説求む__](https://blog.golang.org/go15gc)|
12
+ |Go(gccgo)|__不明__|[__未実装?__](http://golang.jp/tag/gccgo)|
13
+ |Rust|[○](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|[×](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|
14
+ |Swift|[○](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)|[__×__](https://www.quora.com/Why-doesnt-Apple-Swift-adopt-the-memory-management-method-of-garbage-collection-like-in-Java)|
15
+ |Haskell(GHC)|__不明__|__世代別GC?__|
10
16
  |Java(Oracle)|__不明__|[世代別GC](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/introduction.html)+[コンカレントGC](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/cms.html)+[G1](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/g1_gc.html)|
11
17
  |Java(OpenJDK)|__不明__|__不明__|
12
18
  |C#(.NET Framework)|[×](https://blogs.msdn.microsoft.com/brada/2005/02/11/resource-management/)|[世代別GC](https://msdn.microsoft.com/ja-jp/library/ee787088(v=vs.110).aspx)|
13
19
  |C#(Mono)|__不明__|__不明__|
14
- |Haskell(GHC)|__不明__|__世代別GC?__|
20
+ |Erlang|__不明__|__インクリメンタルGC?__|
15
21
  |Perl5|__○?__|__不明__|
16
22
  |Perl6(Rakudo)|__不明__|__不明__|
17
23
  |Python(CPython)|[○](http://docs.python.jp/3/extending/extending.html#reference-counts)|[世代別GC](http://docs.python.jp/3/library/gc.html#module-gc)|
@@ -21,11 +27,6 @@
21
27
  |JavaScript(SpiderMonkey)|__○?__|__M&S?__|
22
28
  |JavaScript(JavaScriptCore)|__○?__|__M&S?__|
23
29
  |JScript(Chakra)|__○?__|__M&S?__|
24
- |Go(gc)|__不明__|[__よくわからない、解説求む__](https://blog.golang.org/go15gc)|
25
- |Go(gccgo)|__不明__|[__未実装?__](http://golang.jp/tag/gccgo)|
26
- |Rust|[○](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|[×](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|
27
- |Erlang|__不明__|__インクリメンタルGC?__|
28
- |Swift|[○](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)|[__×__](https://www.quora.com/Why-doesnt-Apple-Swift-adopt-the-memory-management-method-of-garbage-collection-like-in-Java)|
29
30
 
30
31
  ※ __斜体__はよくわかっていない部分です。
31
32
  ※ 循環参照も確実に回収できる方式をGCとしています。よって、スマートポインタはGCではありません。

5

Swiftを追加

2016/04/15 13:13

投稿

raccy
raccy

スコア21767

title CHANGED
File without changes
body CHANGED
@@ -25,7 +25,7 @@
25
25
  |Go(gccgo)|__不明__|[__未実装?__](http://golang.jp/tag/gccgo)|
26
26
  |Rust|[○](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|[×](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|
27
27
  |Erlang|__不明__|__インクリメンタルGC?__|
28
- |Swift|__不明__|__不明__|
28
+ |Swift|[○](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)|[__×__](https://www.quora.com/Why-doesnt-Apple-Swift-adopt-the-memory-management-method-of-garbage-collection-like-in-Java)|
29
29
 
30
30
  ※ __斜体__はよくわかっていない部分です。
31
31
  ※ 循環参照も確実に回収できる方式をGCとしています。よって、スマートポインタはGCではありません。

4

Rustについて追加

2016/04/14 10:21

投稿

raccy
raccy

スコア21767

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,7 @@
23
23
  |JScript(Chakra)|__○?__|__M&S?__|
24
24
  |Go(gc)|__不明__|[__よくわからない、解説求む__](https://blog.golang.org/go15gc)|
25
25
  |Go(gccgo)|__不明__|[__未実装?__](http://golang.jp/tag/gccgo)|
26
- |Rust|__不明__|__不明__|
26
+ |Rust|[○](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|[×](https://www.rust-lang.org/faq.html#is-rust-garbage-collected)|
27
27
  |Erlang|__不明__|__インクリメンタルGC?__|
28
28
  |Swift|__不明__|__不明__|
29
29
 
@@ -35,6 +35,7 @@
35
35
  ※ Mozillaに[JavaScriptにおけるメモリ管理のドキュメント](https://developer.mozilla.org/ja/docs/Web/JavaScript/Memory_Management)がありますが、概要だけではっきりしません。
36
36
  ※ その他、この言語はこれを使っているという情報があれば教えて下さい。
37
37
  ※ Java8にはインクリメンタルGCもあるようですが、非推奨になっています。
38
+ ※ Rustの参照カウントは標準ライブラリとして提供されます。
38
39
 
39
40
  間違い等があれば、ご指摘下さい。「無い」ことを証明するのは悪魔の証明になり得るため、しばらくして指摘が無ければ、不明部分は「×」にしていきたいと思います。世代数も調べていった方が良いかちょっと悩んでいます(世代別GCでは無い場合は1世代しかないという扱いをするとか)。
40
41
 

3

C#が参照カウントしていないのとJavaについてG1を追加

2016/04/12 22:17

投稿

raccy
raccy

スコア21767

title CHANGED
File without changes
body CHANGED
@@ -7,9 +7,9 @@
7
7
  |---|:---:|:---:|
8
8
  |C|×|×|
9
9
  |C++(スマートポインタ)|[○](http://en.cppreference.com/w/cpp/memory/shared_ptr)|×|
10
- |Java(Oracle)|__不明__|[世代別GC+コンカレントGC](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/introduction.html)|
10
+ |Java(Oracle)|__不明__|[世代別GC](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/introduction.html)+[コンカレントGC](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/cms.html)+[G1](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/g1_gc.html)|
11
11
  |Java(OpenJDK)|__不明__|__不明__|
12
- |C#(.NET Framework)|__不明__|[世代別GC](https://msdn.microsoft.com/ja-jp/library/ee787088(v=vs.110).aspx)|
12
+ |C#(.NET Framework)|[×](https://blogs.msdn.microsoft.com/brada/2005/02/11/resource-management/)|[世代別GC](https://msdn.microsoft.com/ja-jp/library/ee787088(v=vs.110).aspx)|
13
13
  |C#(Mono)|__不明__|__不明__|
14
14
  |Haskell(GHC)|__不明__|__世代別GC?__|
15
15
  |Perl5|__○?__|__不明__|
@@ -34,6 +34,7 @@
34
34
  ※ JavaはJava仮想マシン、C#は.NET Framework/Mono依存の可能性があります。ScalaやKotlin、F#やVB.NETについても情報があれば教えて下さい。
35
35
  ※ Mozillaに[JavaScriptにおけるメモリ管理のドキュメント](https://developer.mozilla.org/ja/docs/Web/JavaScript/Memory_Management)がありますが、概要だけではっきりしません。
36
36
  ※ その他、この言語はこれを使っているという情報があれば教えて下さい。
37
+ ※ Java8にはインクリメンタルGCもあるようですが、非推奨になっています。
37
38
 
38
39
  間違い等があれば、ご指摘下さい。「無い」ことを証明するのは悪魔の証明になり得るため、しばらくして指摘が無ければ、不明部分は「×」にしていきたいと思います。世代数も調べていった方が良いかちょっと悩んでいます(世代別GCでは無い場合は1世代しかないという扱いをするとか)。
39
40
 
@@ -45,6 +46,7 @@
45
46
  * 世代別GC: [世代別ガベージコレクション](https://ja.wikipedia.org/wiki/%E4%B8%96%E4%BB%A3%E5%88%A5%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)。M&SとコピーGCを組み合わせ、オブジェクトを世代に分けることで効率よく回収を行う方式。
46
47
  * コンカレントGC: STWせずに並列処理でできるだけマーク付けをすることで、STWを極力なくす方式。
47
48
  * インクリメンタルGC: 少しずつ小まめにできるだけマーク付けをすることで、一回あたりのSTWを短くする方式。
49
+ * G1: ガベージファースト・コレクタ。ヒープをいくつかに分割して、余り使っていないヒープを収集、圧縮し、一気に解放する方式らしい。
48
50
  * STW: Stop the World。時よ止まれ!止まった時の中で動けるのはGCだけ。
49
51
 
50
52
  【その他】

2

個人ブログも大歓迎

2016/04/04 14:30

投稿

raccy
raccy

スコア21767

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ある質問のある回答で、JavaやC#が[参照カウント](https://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88)を使用していると言うのがありました。しかし、私の記憶では、JavaやC#は参照カウントは使用していなかったと思います。色々調べましたが、公式または(個人ブログとかじゃない)信頼できる準公式な情報がうまく見つからず、わからない状態です。
2
2
 
3
- そこで、参照カウントの有無やGCの種類をまとめたいと思っています。それぞれの言語について情報(公式なドキュメント、信頼できる企業・団体のサイト、多数の技術者によってメンテナンスされているWikiなど)を知っている方は教えていただけませんか?
3
+ そこで、参照カウントの有無やGCの種類をまとめたいと思っています。それぞれの言語について情報(公式なドキュメント、信頼できる企業・団体のサイト、多数の技術者によってメンテナンスされているWikiなど)を知っている方は教えていただけませんか? 公式のみだと情報が少なくなりそうなので、この際、個人ブログ等でもかまいません(ただし、参考資料扱いにさせていただきます)。
4
4
 
5
5
  【言語/実装別GC一覧】
6
6
  |言語|参照カウント|GC|

1

JavaScript関係でMozillaの資料を追加

2016/04/03 22:06

投稿

raccy
raccy

スコア21767

title CHANGED
File without changes
body CHANGED
@@ -17,9 +17,10 @@
17
17
  |Python(CPython)|[○](http://docs.python.jp/3/extending/extending.html#reference-counts)|[世代別GC](http://docs.python.jp/3/library/gc.html#module-gc)|
18
18
  |PHP|[○](http://php.net/manual/ja/features.gc.refcounting-basics.php)|[M&S](http://php.net/manual/ja/features.gc.collecting-cycles.php)|
19
19
  |Ruby(MRI)|×|[世代別GC+インクリメンタルGC](https://www.ruby-lang.org/ja/news/2014/12/25/ruby-2-2-0-released/)|
20
- |JavaScript(V8)|__不明__|__不明__|
20
+ |JavaScript(V8)|__○?__|__M&S?__|
21
- |JavaScript(SpiderMonkey)|__不明__|__不明__|
21
+ |JavaScript(SpiderMonkey)|__○?__|__M&S?__|
22
+ |JavaScript(JavaScriptCore)|__○?__|__M&S?__|
22
- |JScript(Chakra)|__不明__|__不明__|
23
+ |JScript(Chakra)|__○?__|__M&S?__|
23
24
  |Go(gc)|__不明__|[__よくわからない、解説求む__](https://blog.golang.org/go15gc)|
24
25
  |Go(gccgo)|__不明__|[__未実装?__](http://golang.jp/tag/gccgo)|
25
26
  |Rust|__不明__|__不明__|
@@ -31,9 +32,10 @@
31
32
  ※ 各言語は最新バージョンが対象です。なお、Python2とPython3は同じのようです。PHPにGCが追加されたのは5.3からです。RubyはRubyはM&S→世代別GC→インクリメンタルGCと進化して行っています。
32
33
  ※ 実装は明記されていない限り各言語の公式なものとします。
33
34
  ※ JavaはJava仮想マシン、C#は.NET Framework/Mono依存の可能性があります。ScalaやKotlin、F#やVB.NETについても情報があれば教えて下さい。
35
+ ※ Mozillaに[JavaScriptにおけるメモリ管理のドキュメント](https://developer.mozilla.org/ja/docs/Web/JavaScript/Memory_Management)がありますが、概要だけではっきりしません。
34
36
  ※ その他、この言語はこれを使っているという情報があれば教えて下さい。
35
37
 
36
- 間違い等があれば、ご指摘下さい。「無い」ことを証明するのは悪魔の証明になり得るため、しばらくして指摘が無ければ、不明部分は「×」にしていきたいと思います。
38
+ 間違い等があれば、ご指摘下さい。「無い」ことを証明するのは悪魔の証明になり得るため、しばらくして指摘が無ければ、不明部分は「×」にしていきたいと思います。世代数も調べていった方が良いかちょっと悩んでいます(世代別GCでは無い場合は1世代しかないという扱いをするとか)。
37
39
 
38
40
  【用語集】
39
41
  * 参照カウント: オブジェクトへの参照数をカウントしていき、0になれば即座に削除される方式。実装が単純で高速だが、多数の小さなオブジェクトを生成・破棄する場合はオーバーヘッドが大きくなる。また、循環参照は回収できないという致命的な欠点があるため、これだけではGCとは言えない。