ãä»çµã¿è§£èª¬ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¯ã©ããã£ãŠäžèŠãªã¡ã¢ãªãååããŠããã®ã â GCã®ä»çµã¿ãå³è§£
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã£ãŠããèããã©ãäœãããŠãã®ïŒ
ããã°ã©ã ãåããšããããŒã¿ã眮ãããã«ãã¡ã¢ãªãã£ãŠããäœæ¥ã¹ããŒã¹ã䜿ããã ãã©ã䜿ãçµãã£ãããŒã¿ããã®ãŸãŸã«ããŠãããšã¹ããŒã¹ãã©ãã©ãåãŸã£ã¡ãããããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒGCïŒã¯ããã®ããã䜿ããªãããŒã¿ããèªåã§èŠã€ããŠçä»ããŠãããä»çµã¿ã ãã
èªåãããªãå Žåãããã®ïŒ
ããããCãC++ã¿ãããªèšèªã§ã¯ãããã°ã©ããèªåã§ malloc() ã§ã¡ã¢ãªã確ä¿ããŠã䜿ãçµãã£ãã free() ã§è¿ããã£ãŠããæå管çããããã ãã§ã人éããããšãè§£æŸãå¿ããŠã¡ã¢ãªãè¶³ããªããªãïŒã¡ã¢ãªãªãŒã¯ïŒããšããããè§£æŸããã¡ã¢ãªã䜿ã£ã¡ããïŒãã³ã°ãªã³ã°ãã€ã³ã¿ïŒãã¿ãããªãã°ãèµ·ãããããã ããã
ããã¯æããâŠãGCãããã°å®å¿ã£ãŠããšïŒ
ããªã楜ã«ãªãããJavaãPythonãJavaScriptãªããã¯GCãæšæºæèŒãããŠãŠãããã°ã©ããã¡ã¢ãªã®è§£æŸãæèããªããŠãããã ããã ããGCã«ãããã€ãã®æ¹åŒããã£ãŠãããããåŸæã»äžåŸæããããã ãã
ã©ããªæ¹åŒãããã®ïŒ
代衚çãªã®ã¯ãããŒã¯&ã¹ã€ãŒããæ¹åŒã ãããŸããããã°ã©ã ã®ãã«ãŒãããšåŒã°ããèµ·ç¹ïŒã°ããŒãã«å€æ°ãã¹ã¿ãã¯äžã®å€æ°ïŒãããã©ãããªããžã§ã¯ãã«ã䜿çšäžãã®å°ïŒããŒã¯ïŒãä»ããŠãããã ãæ¬¡ã«ãããŒã¯ãä»ããŠããªããªããžã§ã¯ãã¯ããã誰ãããåç §ãããŠãªãïŒãŽãããšå€æããŠååïŒã¹ã€ãŒãïŒãããå°éã§ãããã©ããã§çæ»ãå€å®ããã·ã³ãã«ãªä»çµã¿ã ãã
ãªãã»ã©ïŒä»ã«ã¯ã©ããªæ¹åŒãããã®ïŒ
ãåç §ã«ãŠã³ããæ¹åŒãããããåãªããžã§ã¯ãããèªåãåç §ããŠããæ°ããæã£ãŠããŠãåç §ãå¢ãããšã«ãŠã³ããïŒ1ãæžããšâ1ãããã«ãŠã³ãã0ã«ãªã£ãç¬éã«ããååã§ãããããã¿ã€ãã³ã°ãäºæž¬ãããããã ãPythonã¯ãã®æ¹åŒãããŒã¹ã«ããŠããã
ããååã§ãããªãããã£ã¡ã®ã»ããè¯ãããã ãã©âŠïŒ
匱ç¹ããããã ããã埪ç°åç §ãã£ãŠèšã£ãŠããªããžã§ã¯ãAãBãåç §ããŠãBãAãåç §ããŠãç¶æ ã ãšãã©ã¡ããã«ãŠã³ãã0ã«ãªããªãããååã§ããªããã ãã ããPythonã§ã¯åç §ã«ãŠã³ãã«å ããŠã埪ç°åç §ãæ€åºããè£å©çãªGCã䜵çšããŠããã
GCã£ãŠè²ã 工倫ããŠããã ãããGenerational GCãã£ãŠããã®ãèããããšããããã ãã©ãäœãªã®ïŒ
äžä»£å¥GCã ããããã¯ãè¥ããªããžã§ã¯ãã»ã©æ©ãäžèŠã«ãªããã£ãŠããçµéšåã«åºã¥ããæ¹åŒã ããã¡ã¢ãªäžã®ãªããžã§ã¯ãããYoungäžä»£ããOldäžä»£ãã«åããŠãYoungäžä»£ã¯é »ç¹ã«GCãããã©ãOldäžä»£ã¯ããŸã«ããGCããªããã ãæ¯åå šéšãã§ãã¯ããããå§åçã«å¹çããããã ããJavaã®JVMãæ¡çšããŠãããšã§æåã ãã
GCãåããŠãéãããã°ã©ã ã¯ã©ããªã£ãŠãã®ïŒ
ãã質åã ããåŸæ¥ã®GCã«ã¯ãStop-the-Worldãã£ãŠããåé¡ããã£ãŠãGCãåããŠãéã¯ããã°ã©ã ã®å®è¡ãäžæåæ¢ãããã ãæ°ããªç§çšåºŠãªããããã©ãããŒã¿ã倧éã«ãããšæ°çŸããªç§æ¢ãŸãããšããã£ãŠããªã¢ã«ã¿ã€ã æ§ãæ±ããããã²ãŒã ãéèã·ã¹ãã ã ãšèŽåœçã«ãªããããã
ããã¯å°ããâŠãæè¿ã®èšèªã¯ã©ã察çããŠãã®ïŒ
Goã®GCã¯ããã°ã©ã ã®å®è¡ãšäžŠè¡ããŠããŒã¯åŠçãè¡ããã³ã³ã«ã¬ã³ãGCããæ¡çšããŠããŠãStop-the-World ã®æéãæ°çŸãã€ã¯ãç§ä»¥äžã«æããŠãããJavaã®ZGCãShenandoah GCãåæ§ã®ã¢ãããŒãã ããJavaScriptã®V8ãšã³ãžã³ãäžä»£å¥ïŒã€ã³ã¯ãªã¡ã³ã¿ã«ïŒå°ããã€åŠçïŒæ¹åŒã§ããŠãŒã¶ãŒãäœæããåæ¢ãæžãããŠããã ã
GCã䜿ããªãæ°ããã¢ãããŒããããã£ãŠèãããã ãã©âŠïŒ
Rustã ããRustã¯ãæææš©ã·ã¹ãã ããšããä»çµã¿ã§ãã³ã³ãã€ã«æã«ã¡ã¢ãªã®å¯¿åœã決å®ãããã ãåããŒã¿ã«ã¯å¿ ã1ã€ã®ãææè ããããŠãææè ãã¹ã³ãŒããæãããšèªåçã«è§£æŸããããGCã®ã©ã³ã¿ã€ã ã³ã¹ãããŒããªã®ã«ãã¡ã¢ãªãªãŒã¯ããã³ã°ãªã³ã°ãã€ã³ã¿ãèµ·ããªããGCãšã¯å šãéãã¢ãããŒãã§ã¡ã¢ãªå®å šãå®çŸããç»æçãªèšèšã ãã
ããããïŒçµå±ãã©ã®æ¹åŒãäžçªããã®ïŒ
çšé次第ã ããWebã¢ããªãããžãã¹ããžãã¯ãªããéçºå¹çãéèŠããŠGCä»ãã®èšèªïŒJava, Go, PythonïŒãåããŠãããªã¢ã«ã¿ã€ã åŠçãçµã¿èŸŒã¿ã·ã¹ãã ãªãRustãC++ã匷ããæè¿ã®ãã¬ã³ããšããŠã¯ãGCã®åæ¢æéãããã«çãããããåèšèªã®ç«¶äºãã€ã³ãã«ãªã£ãŠããŠãGoãJavaã¯äžä»£ãéããããšã«å€§å¹ ã«æ¹åããŠããŠãããGCã¯50幎以äžã®æŽå²ãããæè¡ã ãã©ãä»ãé²åãç¶ããŠããã ã