çŸä»£ã®ã©ã³ã¿ã€ã ã·ã¹ãã ãæ¯ããåºæ¬çãªã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¢ã«ãŽãªãºã ãæ¢æ±ããŸããããã¯äžçäžã®ã¡ã¢ãªç®¡çãšã¢ããªã±ãŒã·ã§ã³æ§èœã«ãšã£ãŠäžå¯æ¬ ã§ãã
ã©ã³ã¿ã€ã ã·ã¹ãã ïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¢ã«ãŽãªãºã ã®æ·±æã
è€éãªã³ã³ãã¥ãŒãã£ã³ã°ã®äžçã«ãããŠãã©ã³ã¿ã€ã ã·ã¹ãã ã¯ãœãããŠã§ã¢ã«åœãå¹ã蟌ãç®ã«èŠããªããšã³ãžã³ã§ãããªãœãŒã¹ã管çããã³ãŒããå®è¡ããã¢ããªã±ãŒã·ã§ã³ã®åæ»ãªåäœãä¿èšŒããŸããå€ãã®çŸä»£ã®ã©ã³ã¿ã€ã ã·ã¹ãã ã®äžå¿ã«ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒGCïŒãšããéèŠãªã³ã³ããŒãã³ãããããŸããGCã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠäœ¿çšãããªããªã£ãã¡ã¢ãªãèªåçã«è§£æŸããããã»ã¹ã§ãããã¡ã¢ãªãªãŒã¯ãé²ããå¹ççãªãªãœãŒã¹å©çšãä¿èšŒããŸãã
äžçäžã®éçºè ã«ãšã£ãŠãGCãçè§£ããããšã¯ãããã¯ãªãŒã³ãªã³ãŒããæžãããšã ãã§ã¯ãããŸãããå ç¢ã§ãããã©ãŒãã³ã¹ãé«ããã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšã«ã€ãªãããŸãããã®å æ¬çãªæ¢æ±ã§ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæ¯ããã³ã¢ã³ã³ã»ãããšæ§ã ãªã¢ã«ãŽãªãºã ãæãäžãã倿§ãªæè¡çèæ¯ãæã€å°éå®¶ã«ãšã£ãŠäŸ¡å€ããæŽå¯ãæäŸããŸãã
ã¡ã¢ãªç®¡çã®å¿ èŠæ§
ç¹å®ã®ã¢ã«ãŽãªãºã ã«é£ã³èŸŒãåã«ããªãã¡ã¢ãªç®¡çãããã»ã©éèŠãªã®ããçè§£ããããšãäžå¯æ¬ ã§ããåŸæ¥ã®ããã°ã©ãã³ã°ãã©ãã€ã ã§ã¯ãéçºè ãæåã§ã¡ã¢ãªã®å²ãåœãŠãšè§£æŸãè¡ã£ãŠããŸãããããã¯ãã现ããªå¶åŸ¡ãå¯èœã«ããäžæ¹ã§ãæªåé«ããã°ã®åå ãšããªããŸãïŒ
- ã¡ã¢ãªãªãŒã¯ïŒ å²ãåœãŠãããã¡ã¢ãªãäžèŠã«ãªã£ãŠãæç€ºçã«è§£æŸãããªãå Žåããã®ã¡ã¢ãªã¯å æããããŸãŸãšãªããå©çšå¯èœãªã¡ã¢ãªãåŸã ã«æ¯æžããŸããæéãçµã€ãšãã¢ããªã±ãŒã·ã§ã³ã®é床äœäžãã¯ã©ãã·ã¥ãåŒãèµ·ããå¯èœæ§ããããŸãã
- ãã³ã°ãªã³ã°ãã€ã³ã¿ïŒ ã¡ã¢ãªãè§£æŸãããåŸããã€ã³ã¿ããããåç §ããŠããå Žåããã®ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããšãããšæªå®çŸ©ã®åäœãšãªãããã°ãã°ã»ãã¥ãªãã£è匱æ§ãã¯ã©ãã·ã¥ã«ã€ãªãããŸãã
- äºéè§£æŸãšã©ãŒïŒ ãã§ã«è§£æŸãããã¡ã¢ãªãå床解æŸããããšããç Žæãäžå®å®æ§ã®åå ãšãªããŸãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ããèªåã¡ã¢ãªç®¡çã¯ããããã®è² æ ã軜æžããããšãç®çãšããŠããŸããã©ã³ã¿ã€ã ã·ã¹ãã ãæªäœ¿çšã®ã¡ã¢ãªãç¹å®ãè§£æŸãã責任ãè² ãããšã§ãéçºè ã¯äœã¬ãã«ã®ã¡ã¢ãªæäœã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ããžãã¯ã«éäžã§ããããã«ãªããŸããããã¯ã倿§ãªããŒããŠã§ã¢èœåããããã€ã¡ã³ãç°å¢ããå埩åãããå¹ççãªãœãããŠã§ã¢ãå¿ èŠãšããã°ããŒãã«ãªæèã«ãããŠç¹ã«éèŠã§ãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ã³ã¢ã³ã³ã»ãã
ããã€ãã®åºæ¬çãªã³ã³ã»ãããããã¹ãŠã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¢ã«ãŽãªãºã ã®åºç€ãšãªã£ãŠããŸãïŒ
1. å°éå¯èœæ§
ã»ãšãã©ã®GCã¢ã«ãŽãªãºã ã®æ žãšãªãååã¯å°éå¯èœæ§ã§ãããªããžã§ã¯ãã¯ãæ¢ç¥ã®ãçåããŠãããã«ãŒãã®éåãããã®ãªããžã§ã¯ããžã®ãã¹ãååšããå Žåã«å°éå¯èœã§ãããšèŠãªãããŸããã«ãŒãã«ã¯éåžžã以äžãå«ãŸããŸãïŒ
- ã°ããŒãã«å€æ°
- å®è¡ã¹ã¿ãã¯äžã®ããŒã«ã«å€æ°
- CPUã¬ãžã¹ã¿
- éç倿°
ãããã®ã«ãŒãããå°éã§ããªããªããžã§ã¯ãã¯ãã¹ãŠã¬ããŒãžãšèŠãªãããè§£æŸããããšãã§ããŸãã
2. ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãµã€ã¯ã«
å žåçãªGCãµã€ã¯ã«ã¯ãããã€ãã®ãã§ãŒãºã§æ§æãããŸãïŒ
- ããŒãã³ã°ïŒ GCã¯ã«ãŒãããéå§ãããªããžã§ã¯ãã°ã©ããèµ°æ»ããŠããã¹ãŠã®å°éå¯èœãªãªããžã§ã¯ããããŒã¯ããŸãã
- ã¹ã€ãŒãã³ã°ïŒãŸãã¯ã³ã³ãã¯ã·ã§ã³ïŒïŒ ããŒãã³ã°ã®åŸãGCã¯ã¡ã¢ãªãå埩åŠçããŸããããŒã¯ãããŠããªããªããžã§ã¯ãïŒã¬ããŒãžïŒãè§£æŸãããŸããäžéšã®ã¢ã«ãŽãªãºã ã§ã¯ãå°éå¯èœãªãªããžã§ã¯ããé£ç¶ããã¡ã¢ãªäœçœ®ã«ç§»åïŒã³ã³ãã¯ã·ã§ã³ïŒããŠãæçåãæžãããŸãã
3. ããŒãº
GCã«ãããéèŠãªèª²é¡ã¯ãã¹ãããã»ã¶ã»ã¯ãŒã«ãïŒSTWïŒããŒãºã®å¯èœæ§ã§ãããããã®ããŒãºäžãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã¯åæ¢ãããGCãå¹²æžãªãã«ãã®æäœãå®è¡ã§ããããã«ããŸããé·ãSTWããŒãºã¯ã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããããã¯ããããã°ããŒãã«åžå Žã®ãŠãŒã¶ãŒåãã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéå€§ãªæžå¿µäºé ã§ãã
äž»èŠãªã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¢ã«ãŽãªãºã
é·å¹Žã«ããããæ§ã ãªGCã¢ã«ãŽãªãºã ãéçºãããŠããŸããããããããã«é·æãšçæããããŸããããã§ã¯ãæãäžè¬çãªãã®ãããã€ãæ¢ããŸãïŒ
1. ããŒã¯ïŒã¹ã€ãŒã
ããŒã¯ïŒã¹ã€ãŒãã¢ã«ãŽãªãºã ã¯ãæãå€ããæãåºæ¬çãªGCæè¡ã®äžã€ã§ããããã¯2ã€ã®æç¢ºãªãã§ãŒãºã§åäœããŸãïŒ
- ããŒã¯ãã§ãŒãºïŒ GCã¯ã«ãŒãã»ããããéå§ãããªããžã§ã¯ãã°ã©ãå šäœãèµ°æ»ããŸããééãããã¹ãŠã®ãªããžã§ã¯ããããŒã¯ãããŸãã
- ã¹ã€ãŒããã§ãŒãºïŒ 次ã«GCã¯ããŒãå šäœãã¹ãã£ã³ããŸããããŒã¯ãããŠããªããªããžã§ã¯ãã¯ã¬ããŒãžãšèŠãªãããè§£æŸãããŸããè§£æŸãããã¡ã¢ãªã¯ãå°æ¥ã®å²ãåœãŠã®ããã«ããªãŒãªã¹ãã«è¿œå ãããŸãã
é·æïŒ
- æŠå¿µçã«åçŽã§åºãçè§£ãããŠããŸãã
- 埪ç°ããŒã¿æ§é ã广çã«åŠçããŸãã
çæïŒ
- ããã©ãŒãã³ã¹ïŒ ããŒãå šäœãèµ°æ»ãããã¹ãŠã®ã¡ã¢ãªãã¹ãã£ã³ããå¿ èŠããããããé ããªãå¯èœæ§ããããŸãã
- æçåïŒ ãªããžã§ã¯ããç°ãªãå Žæã§å²ãåœãŠããããè§£æŸãããããããããã¡ã¢ãªãæçåããåèšã®ç©ºãã¡ã¢ãªãååã«ãã£ãŠãå²ãåœãŠã«å€±æããå¯èœæ§ããããŸãã
- STWããŒãºïŒ ç¹ã«å€§ããªããŒãã§ã¯ãéåžžãé·ãã¹ãããã»ã¶ã»ã¯ãŒã«ãããŒãºã䌎ããŸãã
äŸïŒ Javaã®ã¬ããŒãžã³ã¬ã¯ã¿ã®åæããŒãžã§ã³ã§ã¯ãåºæ¬çãªããŒã¯ïŒã¹ã€ãŒãã¢ãããŒãã䜿çšãããŠããŸããã
2. ããŒã¯ïŒã³ã³ãã¯ã
ããŒã¯ïŒã¹ã€ãŒãã®æçååé¡ã«å¯ŸåŠãããããããŒã¯ïŒã³ã³ãã¯ãã¢ã«ãŽãªãºã ã¯3çªç®ã®ãã§ãŒãºã远å ããŸãïŒ
- ããŒã¯ãã§ãŒãºïŒ ããŒã¯ïŒã¹ã€ãŒããšåãã§ããã¹ãŠã®å°éå¯èœãªãªããžã§ã¯ããããŒã¯ããŸãã
- ã³ã³ãã¯ããã§ãŒãºïŒ ããŒãã³ã°ã®åŸãGCã¯ãã¹ãŠã®ããŒã¯ãããïŒå°éå¯èœãªïŒãªããžã§ã¯ããé£ç¶ããã¡ã¢ãªãããã¯ã«ç§»åãããŸããããã«ããæçåãè§£æ¶ãããŸãã
- ã¹ã€ãŒããã§ãŒãºïŒ ãã®åŸãGCã¯ã¡ã¢ãªãã¹ã€ãŒãããŸãããªããžã§ã¯ããã³ã³ãã¯ã·ã§ã³ãããããã空ãã¡ã¢ãªã¯ããŒãã®çµç«¯ã«ããåäžã®é£ç¶ãããããã¯ãšãªããå°æ¥ã®å²ãåœãŠãéåžžã«é«éã«ãªããŸãã
é·æïŒ
- ã¡ã¢ãªã®æçåãè§£æ¶ããŸãã
- ãã®åŸã®å²ãåœãŠãé«éã«ãªããŸãã
- 埪ç°ããŒã¿æ§é ãåŠçã§ããŸãã
çæïŒ
- ããã©ãŒãã³ã¹ïŒ ã³ã³ãã¯ã·ã§ã³ãã§ãŒãºã¯ãã¡ã¢ãªå ã§å€æ°ã®ãªããžã§ã¯ããç§»åãããå¯èœæ§ããããããèšç®ã³ã¹ããé«ããªãããšããããŸãã
- STWããŒãºïŒ ãªããžã§ã¯ããç§»åãããå¿ èŠããããããäŸç¶ãšããŠé¡èãªSTWããŒãºãçºçããŸãã
äŸïŒ ãã®ã¢ãããŒãã¯ãããé«åºŠãªå€ãã®ã³ã¬ã¯ã¿ã®åºç€ãšãªã£ãŠããŸãã
3. ã³ããŒGC
ã³ããŒGCã¯ãããŒããFrom空éãšTo空éã®2ã€ã®ã¹ããŒã¹ã«åå²ããŸããéåžžãæ°ãããªããžã§ã¯ãã¯From空éã«å²ãåœãŠãããŸãã
- ã³ããŒãã§ãŒãºïŒ GCãããªã¬ãŒããããšãGCã¯ã«ãŒãããéå§ããŠFrom空éãèµ°æ»ããŸããå°éå¯èœãªãªããžã§ã¯ãã¯From空éããTo空éã«ã³ããŒãããŸãã
- 空éã®äº€æïŒ ãã¹ãŠã®å°éå¯èœãªãªããžã§ã¯ããã³ããŒããããšãFrom空éã«ã¯ã¬ããŒãžã®ã¿ãå«ãŸããTo空éã«ã¯ãã¹ãŠã®çåãªããžã§ã¯ããå«ãŸããŸãããã®åŸã空éã®åœ¹å²ã亀æãããŸããå€ãFrom空éãæ°ããTo空éãšãªããæ¬¡ã®ãµã€ã¯ã«ã®æºåãæŽããŸãã
é·æïŒ
- æçåãªãïŒ ãªããžã§ã¯ãã¯åžžã«é£ç¶ããŠã³ããŒããããããTo空éå ã«æçåã¯çºçããŸããã
- é«éãªå²ãåœãŠïŒ å²ãåœãŠã¯ãçŸåšã®å²ãåœãŠç©ºéå ã®ãã€ã³ã¿ãã€ã³ã¯ãªã¡ã³ãããã ããªã®ã§é«éã§ãã
çæïŒ
- ã¹ããŒã¹ã®ãªãŒããŒãããïŒ 2ã€ã®ç©ºéãã¢ã¯ãã£ãã«ãªããããåäžããŒãã®2åã®ã¡ã¢ãªãå¿ èŠã§ãã
- ããã©ãŒãã³ã¹ïŒ ãã¹ãŠã®çåãªããžã§ã¯ããã³ããŒããå¿ èŠããããããçåãªããžã§ã¯ããå€ãå Žåã«ã³ã¹ããé«ããªãå¯èœæ§ããããŸãã
- STWããŒãºïŒ ãã¯ãSTWããŒãºãå¿ èŠã§ãã
äŸïŒ äžä»£å¥ã¬ããŒãžã³ã¬ã¯ã¿ã§ãè¥ãäžä»£ããåéããããã«ãã䜿çšãããŸãã
4. äžä»£å¥ã¬ããŒãžã³ã¬ã¯ã·ã§ã³
ãã®ã¢ãããŒãã¯ãã»ãšãã©ã®ãªããžã§ã¯ãã¯éåžžã«çã寿åœãæã€ãšããäžä»£å¥ä»®èª¬ã«åºã¥ããŠããŸããäžä»£å¥GCã¯ããŒããè€æ°ã®äžä»£ã«åå²ããŸãïŒ
- è¥ãäžä»£ïŒYoung GenerationïŒïŒ æ°ãããªããžã§ã¯ããå²ãåœãŠãããå Žæãããã§ã®GCã³ã¬ã¯ã·ã§ã³ã¯é »ç¹ã§é«éã§ãïŒãã€ããŒGCïŒã
- å€ãäžä»£ïŒOld GenerationïŒïŒ ããã€ãã®ãã€ããŒGCãçãå»¶ã³ããªããžã§ã¯ããå€ãäžä»£ã«ææ ŒãããŸããããã§ã®GCã³ã¬ã¯ã·ã§ã³ã¯é »åºŠãäœãããã培åºçã§ãïŒã¡ãžã£ãŒGCïŒã
ä»çµã¿ïŒ
- æ°ãããªããžã§ã¯ãã¯è¥ãäžä»£ã«å²ãåœãŠãããŸãã
- ãã€ããŒGCïŒå€ãã®å Žåãã³ããŒã³ã¬ã¯ã¿ã䜿çšïŒãè¥ãäžä»£ã§é »ç¹ã«å®è¡ãããŸããçãæ®ã£ããªããžã§ã¯ãã¯å€ãäžä»£ã«ææ ŒãããŸãã
- ã¡ãžã£ãŒGCã¯å€ãäžä»£ã§ããäœãé »åºŠã§å®è¡ãããå€ãã®å ŽåããŒã¯ïŒã¹ã€ãŒããŸãã¯ããŒã¯ïŒã³ã³ãã¯ãã䜿çšãããŸãã
é·æïŒ
- ããã©ãŒãã³ã¹ã®åäžïŒ ããŒãå šäœãåéããé »åºŠãå€§å¹ ã«åæžããŸããã»ãšãã©ã®ã¬ããŒãžã¯è¥ãäžä»£ã§èŠã€ãããè¿ éã«åéãããŸãã
- ããŒãºæéã®ççž®ïŒ ãã€ããŒGCã¯ãã«ããŒãGCãããã¯ããã«çãã§ãã
çæïŒ
- è€éãïŒ å®è£ ãããè€éã§ãã
- ææ Œã®ãªãŒããŒãããïŒ ãã€ããŒGCãçãå»¶ã³ããªããžã§ã¯ãã«ã¯ææ Œã³ã¹ããããããŸãã
- ãªã¡ã³ããŒãã»ããïŒ å€ãäžä»£ããè¥ãäžä»£ãžã®ãªããžã§ã¯ãåç §ãåŠçããããã«ãããªã¡ã³ããŒãã»ããããå¿ èŠã§ãããããããªãŒããŒãããã远å ããå¯èœæ§ããããŸãã
äŸïŒ Javaä»®æ³ãã·ã³ïŒJVMïŒã¯äžä»£å¥GCãåºç¯å²ã«æ¡çšããŠããŸãïŒäŸïŒã¹ã«ãŒãããã³ã¬ã¯ã¿ãCMSãG1ãZGCãªã©ã®ã³ã¬ã¯ã¿ïŒã
5. åç §ã«ãŠã³ã
å°éå¯èœæ§ããã¬ãŒã¹ãã代ããã«ãåç §ã«ãŠã³ãã¯åãªããžã§ã¯ãã«ã«ãŠã³ããé¢é£ä»ããããã«ããã€ã®åç §ãæããŠãããã瀺ããŸããåç §ã«ãŠã³ãããŒãã«ãªããšããªããžã§ã¯ãã¯ã¬ããŒãžãšèŠãªãããŸãã
- ã€ã³ã¯ãªã¡ã³ãïŒ ãªããžã§ã¯ããžã®æ°ããåç §ãäœæããããšããã®åç §ã«ãŠã³ããã€ã³ã¯ãªã¡ã³ããããŸãã
- ãã¯ãªã¡ã³ãïŒ ãªããžã§ã¯ããžã®åç §ãåé€ããããšããã®ã«ãŠã³ãããã¯ãªã¡ã³ããããŸããã«ãŠã³ãããŒãã«ãªããšããªããžã§ã¯ãã¯å³åº§ã«è§£æŸãããŸãã
é·æïŒ
- ããŒãºãªãïŒ åç §ãåé€ããããšè§£æŸã段éçã«è¡ããããããé·ãSTWããŒãºãåé¿ã§ããŸãã
- åçŽãïŒ æŠå¿µçã«åçŽæå¿«ã§ãã
çæïŒ
- 埪ç°åç §ïŒ æå€§ã®æ¬ ç¹ã¯ã埪ç°ããŒã¿æ§é ãåéã§ããªãããšã§ãããªããžã§ã¯ãAãBãæããBãAãæããŠããå Žåãå€éšåç §ããªããŠãããããã®åç §ã«ãŠã³ãã¯æ±ºããŠãŒãã«ãªãããã¡ã¢ãªãªãŒã¯ã«ã€ãªãããŸãã
- ãªãŒããŒãããïŒ ã«ãŠã³ãã®ã€ã³ã¯ãªã¡ã³ããšãã¯ãªã¡ã³ãã¯ããã¹ãŠã®åç §æäœã«ãªãŒããŒãããã远å ããŸãã
- äºæž¬äžå¯èœãªåäœïŒ åç §ãã¯ãªã¡ã³ãã®é åºã¯äºæž¬äžå¯èœã§ãããã¡ã¢ãªããã€è§£æŸããããã«åœ±é¿ããŸãã
äŸïŒ Swift (ARC - èªååç §ã«ãŠã³ã)ãPythonãObjective-Cã§äœ¿çšãããŠããŸãã
6. ã€ã³ã¯ãªã¡ã³ã¿ã«GC
STWããŒãºæéãããã«ççž®ããããã«ãã€ã³ã¯ãªã¡ã³ã¿ã«GCã¢ã«ãŽãªãºã ã¯GCäœæ¥ãå°ããªãã£ã³ã¯ã§å®è¡ããGCæäœãšã¢ããªã±ãŒã·ã§ã³å®è¡ã亀äºã«è¡ããŸããããã«ãããããŒãºæéãçãä¿ã€ããšãã§ããŸãã
- 段éçãªæäœïŒ ããŒã¯ããã³ã¹ã€ãŒã/ã³ã³ãã¯ããã§ãŒãºãããå°ããªã¹ãããã«åå²ãããŸãã
- ã€ã³ã¿ãŒãªãŒãã³ã°ïŒ ã¢ããªã±ãŒã·ã§ã³ã¹ã¬ããã¯GCäœæ¥ãµã€ã¯ã«ã®éã«å®è¡ã§ããŸãã
é·æïŒ
- ããçãããŒãºïŒ STWããŒãºã®æéãå€§å¹ ã«ççž®ããŸãã
- å¿çæ§ã®åäžïŒ ã€ã³ã¿ã©ã¯ãã£ããªã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãã
çæïŒ
- è€éãïŒ åŸæ¥ã®ã¢ã«ãŽãªãºã ãããå®è£ ãè€éã§ãã
- ããã©ãŒãã³ã¹ãªãŒããŒãããïŒ GCãšã¢ããªã±ãŒã·ã§ã³ã¹ã¬ããéã®èª¿æŽãå¿ èŠãªãããè¥å¹²ã®ãªãŒããŒããããçºçããå¯èœæ§ããããŸãã
äŸïŒ å€ãJVMããŒãžã§ã³ã®ã³ã³ã«ã¬ã³ãããŒã¯ã¹ã€ãŒãïŒCMSïŒã³ã¬ã¯ã¿ã¯ãã€ã³ã¯ãªã¡ã³ã¿ã«ã³ã¬ã¯ã·ã§ã³ã®åæã®è©Šã¿ã§ããã
7. ã³ã³ã«ã¬ã³ãGC
ã³ã³ã«ã¬ã³ãGCã¢ã«ãŽãªãºã ã¯ããã®äœæ¥ã®ã»ãšãã©ãã¢ããªã±ãŒã·ã§ã³ã¹ã¬ãããšäžŠè¡ããŠå®è¡ããŸããããã¯ãGCãã¡ã¢ãªãç¹å®ããŠè§£æŸããŠããéãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãç¶ããããšãæå³ããŸãã
- åèª¿äœæ¥ïŒ GCã¹ã¬ãããšã¢ããªã±ãŒã·ã§ã³ã¹ã¬ããã䞊è¡ããŠåäœããŸãã
- å調ã¡ã«ããºã ïŒ äžè²«æ§ãä¿èšŒããããã«ããã©ã€ã«ã©ãŒããŒãã³ã°ã¢ã«ãŽãªãºã ãïŒã¢ããªã±ãŒã·ã§ã³ã«ãããªããžã§ã¯ãåç §ã®å€æŽã远跡ããïŒã©ã€ãããªã¢ãªã©ã®æŽç·Žãããã¡ã«ããºã ãå¿ èŠã§ãã
é·æïŒ
- æå°éã®STWããŒãºïŒ éåžžã«çãããããã¯ãããŒãºãªããã®æäœãç®æããŸãã
- é«ãã¹ã«ãŒããããšå¿çæ§ïŒ 峿 Œãªã¬ã€ãã³ã·èŠä»¶ãæã€ã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã
çæïŒ
- è€éãïŒ èšèšãšæ£ããå®è£ ãéåžžã«è€éã§ãã
- ã¹ã«ãŒãããã®äœäžïŒ äžŠè¡æäœãšå調ã®ãªãŒããŒãããã«ãããã¢ããªã±ãŒã·ã§ã³å šäœã®ã¹ã«ãŒããããäœäžããããšããããŸãã
- ã¡ã¢ãªãªãŒããŒãããïŒ å€æŽã远跡ããããã«è¿œå ã®ã¡ã¢ãªãå¿ èŠã«ãªãå ŽåããããŸãã
äŸïŒ Javaã®G1ãZGCãShenandoahã®ãããªçŸä»£ã®ã³ã¬ã¯ã¿ããGoããã³.NET Coreã®GCã¯ãé«åºŠã«ã³ã³ã«ã¬ã³ãã§ãã
8. G1 (Garbage-First) ã³ã¬ã¯ã¿
Java 7ã§å°å ¥ãããJava 9ã§ããã©ã«ããšãªã£ãG1ã³ã¬ã¯ã¿ã¯ãã¹ã«ãŒããããšã¬ã€ãã³ã·ã®ãã©ã³ã¹ãåãããã«èšèšãããããµãŒããŒåãããªãŒãžã§ã³ããŒã¹ãäžä»£å¥ãã³ã³ã«ã¬ã³ããªã³ã¬ã¯ã¿ã§ãã
- ãªãŒãžã§ã³ããŒã¹ïŒ ããŒãã倿°ã®å°ããªãªãŒãžã§ã³ã«åå²ããŸãããªãŒãžã§ã³ã¯EdenãSurvivorããŸãã¯Oldã«ãªããŸãã
- äžä»£å¥ïŒ äžä»£å¥ã®ç¹æ§ãç¶æããŸãã
- ã³ã³ã«ã¬ã³ãïŒãã©ã¬ã«ïŒ ã»ãšãã©ã®äœæ¥ãã¢ããªã±ãŒã·ã§ã³ã¹ã¬ãããšäžŠè¡ããŠå®è¡ããéé¿ïŒçåãªããžã§ã¯ãã®ã³ããŒïŒã«ã¯è€æ°ã®ã¹ã¬ããã䜿çšããŸãã
- ç®æšæåïŒ ãŠãŒã¶ãŒãæãŸããããŒãºæéç®æšãæå®ã§ããŸããG1ã¯ãæãã¬ããŒãžãå€ããªãŒãžã§ã³ãæåã«åéããããšã§ããã®ç®æšãéæããããšããŸãïŒãã®ãããGarbage-FirstãïŒã
é·æïŒ
- ãã©ã³ã¹ã®åããããã©ãŒãã³ã¹ïŒ å¹ åºãã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãã
- äºæž¬å¯èœãªããŒãºæéïŒ å€ãã³ã¬ã¯ã¿ãšæ¯èŒããŠãããŒãºæéã®äºæž¬å¯èœæ§ãå€§å¹ ã«åäžããŸããã
- 倧ããªããŒããããŸãåŠçïŒ å€§ããªããŒããµã€ãºã§ã广çã«ã¹ã±ãŒã«ããŸãã
çæïŒ
- è€éãïŒ æ¬è³ªçã«è€éã§ãã
- ããé·ãããŒãºã®å¯èœæ§ïŒ ç®æšããŒãºæéãç©æ¥µçã§ãããŒããçåãªããžã§ã¯ãã§é«åºŠã«æçåããŠããå Žåãåäžã®GCãµã€ã¯ã«ãç®æšãè¶ ããå¯èœæ§ããããŸãã
äŸïŒ å€ãã®çŸä»£ã®Javaã¢ããªã±ãŒã·ã§ã³ã®ããã©ã«ãGCã§ãã
9. ZGCãšShenandoah
ãããã¯ãéåžžã«å€§ããªããŒãïŒãã©ãã€ãçŽïŒã§ããéåžžã«çãããŒãºæéïŒãã°ãã°ããªç§æªæºãç®æšãšããïŒã®ããã«èšèšããããããæè¿ã®é«åºŠãªã¬ããŒãžã³ã¬ã¯ã¿ã§ãã
- ããŒãã¿ã€ã ã³ã³ãã¯ã·ã§ã³ïŒ ã¢ããªã±ãŒã·ã§ã³ãšäžŠè¡ããŠã³ã³ãã¯ã·ã§ã³ãå®è¡ããŸãã
- é«åºŠã«ã³ã³ã«ã¬ã³ãïŒ ã»ãŒãã¹ãŠã®GCäœæ¥ã䞊è¡ããŠè¡ãããŸãã
- ãªãŒãžã§ã³ããŒã¹ïŒ G1ãšåæ§ã®ãªãŒãžã§ã³ããŒã¹ã®ã¢ãããŒãã䜿çšããŸãã
é·æïŒ
- è¶ äœã¬ã€ãã³ã·ïŒ éåžžã«çããäžè²«ããããŒãºæéãç®æããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒ 巚倧ãªããŒããæã€ã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã
çæïŒ
- ã¹ã«ãŒããããžã®åœ±é¿ïŒ ã¹ã«ãŒãããæåã®ã³ã¬ã¯ã¿ãããCPUãªãŒããŒããããè¥å¹²é«ããªãå¯èœæ§ããããŸãã
- æçåºŠïŒ æ¯èŒçæ°ããã§ãããæ¥éã«æçããŠããŸãã
äŸïŒ ZGCãšShenandoahã¯æè¿ã®OpenJDKããŒãžã§ã³ã§å©çšå¯èœã§ãéèååŒãã©ãããã©ãŒã ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãµãŒãã¹ãæäŸããå€§èŠæš¡WebãµãŒãã¹ã®ãããªã¬ã€ãã³ã·ã«ææãªã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãã
ç°ãªãã©ã³ã¿ã€ã ç°å¢ã«ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³
ååã¯æ®éçã§ãããGCã®å®è£ ãšãã¥ã¢ã³ã¹ã¯ç°ãªãã©ã³ã¿ã€ã ç°å¢ã«ãã£ãŠç°ãªããŸãïŒ
- Javaä»®æ³ãã·ã³ (JVM)ïŒ æŽå²çã«ãJVMã¯GC驿°ã®æåç·ã«ç«ã£ãŠããŸããããã©ã°å¯èœãªGCã¢ãŒããã¯ãã£ãæäŸããéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«åºã¥ããŠæ§ã ãªã³ã¬ã¯ã¿ïŒSerialãParallelãCMSãG1ãZGCãShenandoahïŒããéžæã§ããŸãããã®æè»æ§ã¯ã倿§ãªã°ããŒãã«ãããã€ã¡ã³ãã·ããªãªã§ããã©ãŒãã³ã¹ãæé©åããããã«äžå¯æ¬ ã§ãã
- .NETå ±éèšèªã©ã³ã¿ã€ã (CLR)ïŒ .NET CLRãæŽç·ŽãããGCãåããŠããŸããäžä»£å¥ããã³ã³ã³ãã¯ã·ã§ã³ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®äž¡æ¹ãæäŸããŸããCLR GCã¯ãã¯ãŒã¯ã¹ããŒã·ã§ã³ã¢ãŒãïŒã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³åãã«æé©åïŒãŸãã¯ãµãŒããŒã¢ãŒãïŒãã«ãããã»ããµãµãŒããŒã¢ããªã±ãŒã·ã§ã³åãã«æé©åïŒã§åäœã§ããŸãããŸããããŒãºãæå°éã«æããããã«ã³ã³ã«ã¬ã³ãããã³ããã¯ã°ã©ãŠã³ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ããµããŒãããŠããŸãã
- Goã©ã³ã¿ã€ã ïŒ Goããã°ã©ãã³ã°èšèªã¯ãã³ã³ã«ã¬ã³ããªãã©ã€ã«ã©ãŒããŒã¯ïŒã¹ã€ãŒãã¬ããŒãžã³ã¬ã¯ã¿ã䜿çšããŸããããã¯ãGoã®å¹ççãªäžŠè¡ã·ã¹ãã ãæ§ç¯ãããšããå²åŠã«æ²¿ã£ãŠãäœã¬ã€ãã³ã·ãšé«ãäžŠè¡æ§ã®ããã«èšèšãããŠããŸããGo GCã¯ãããŒãºãéåžžã«çããéåžžã¯ãã€ã¯ãç§ã®ãªãŒããŒã«ä¿ã€ããšãç®æããŠããŸãã
- JavaScriptãšã³ãžã³ (V8, SpiderMonkey)ïŒ ãã©ãŠã¶ãNode.jsã®çŸä»£ã®JavaScriptãšã³ãžã³ã¯ãäžä»£å¥ã¬ããŒãžã³ã¬ã¯ã¿ãæ¡çšããŠããŸããããŒã¯ïŒã¹ã€ãŒããªã©ã®æè¡ã䜿çšããUIã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãå¿çæ§ã«ä¿ã€ããã«ã€ã³ã¯ãªã¡ã³ã¿ã«ã³ã¬ã¯ã·ã§ã³ããã°ãã°çµã¿èŸŒãã§ããŸãã
é©åãªGCã¢ã«ãŽãªãºã ã®éžæ
é©åãªGCã¢ã«ãŽãªãºã ãéžæããããšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãã¹ã±ãŒã©ããªãã£ãããã³ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«åœ±é¿ãäžããéèŠãªæ±ºå®ã§ããäžèœã®è§£æ±ºçã¯ãããŸããã以äžã®èŠå ãèæ ®ããŠãã ããïŒ
- ã¢ããªã±ãŒã·ã§ã³èŠä»¶ïŒ ããªãã®ã¢ããªã±ãŒã·ã§ã³ã¯ã¬ã€ãã³ã·ã«ææã§ããïŒäŸïŒãªã¢ã«ã¿ã€ã ååŒãã€ã³ã¿ã©ã¯ãã£ãWebãµãŒãã¹ïŒããããšãã¹ã«ãŒãããæåã§ããïŒäŸïŒãããåŠçãç§åŠèšç®ïŒïŒ
- ããŒããµã€ãºïŒ éåžžã«å€§ããªããŒãïŒæ°åãŸãã¯æ°çŸã®ã¬ãã€ãïŒã®å Žåãã¹ã±ãŒã©ããªãã£ãšäœã¬ã€ãã³ã·ã®ããã«èšèšãããã³ã¬ã¯ã¿ïŒG1ãZGCãShenandoahãªã©ïŒããã°ãã°å¥œãŸããŸãã
- äžŠè¡æ§ã®ããŒãºïŒ ã¢ããªã±ãŒã·ã§ã³ã¯é«ãã¬ãã«ã®äžŠè¡æ§ãå¿ èŠãšããŸããïŒã³ã³ã«ã¬ã³ãGCã¯æçã§ãã
- éçºå·¥æ°ïŒ ããåçŽãªã¢ã«ãŽãªãºã ã¯çè§£ãããããããããŸãããããã°ãã°ããã©ãŒãã³ã¹ã®ãã¬ãŒããªãã䌎ããŸããé«åºŠãªã³ã¬ã¯ã¿ã¯ããè¯ãããã©ãŒãã³ã¹ãæäŸããŸãããããè€éã§ãã
- ã¿ãŒã²ããç°å¢ïŒ ãããã€ã¡ã³ãç°å¢ïŒäŸïŒã¯ã©ãŠããçµã¿èŸŒã¿ã·ã¹ãã ïŒã®èœåãšå¶éããéžæã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
GCæé©åã®ããã®å®è·µçãªãã³ã
é©åãªã¢ã«ãŽãªãºã ãéžæããã ãã§ãªããGCã®ããã©ãŒãã³ã¹ãæé©åããããšãã§ããŸãïŒ
- GCãã©ã¡ãŒã¿ã®èª¿æŽïŒ ã»ãšãã©ã®ã©ã³ã¿ã€ã ã§ã¯GCãã©ã¡ãŒã¿ïŒäŸïŒããŒããµã€ãºãäžä»£ãµã€ãºãç¹å®ã®ã³ã¬ã¯ã¿ãªãã·ã§ã³ïŒã®èª¿æŽãå¯èœã§ããããã«ã¯å€ãã®å Žåããããã¡ã€ãªã³ã°ãšå®éšãå¿ èŠã§ãã
- ãªããžã§ã¯ãããŒãªã³ã°ïŒ ããŒãªã³ã°ãéããŠãªããžã§ã¯ããåå©çšããããšã§ãå²ãåœãŠãšè§£æŸã®æ°ãæžãããããã«ãã£ãŠGCã®è² è·ã軜æžã§ããŸãã
- äžèŠãªãªããžã§ã¯ãäœæã®åé¿ïŒ çåœãªãªããžã§ã¯ãã倧éã«äœæãããšGCã®äœæ¥ãå¢å ããå¯èœæ§ããããããæ³šæããŠãã ããã
- 匱ã/ãœããåç §ã®è³¢æãªäœ¿çšïŒ ãããã®åç §ã«ãããã¡ã¢ãªãäžè¶³ããŠããå Žåã«ãªããžã§ã¯ããåéã§ããããããã£ãã·ã¥ã«åœ¹ç«ã¡ãŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°ïŒ ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠGCã®åäœãçè§£ããé·ãããŒãºãç¹å®ããGCãªãŒããŒããããé«ãé åãç¹å®ããŸããVisualVMãJConsole (Javaçš)ãPerfView (.NETçš)ã`pprof` (Goçš)ãªã©ã®ããŒã«ã¯éåžžã«è²Žéã§ãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®æªæ¥
ããã«äœãã¬ã€ãã³ã·ãšé«ãå¹çã®è¿œæ±ã¯ç¶ããŠããŸããå°æ¥ã®GCç ç©¶éçºã¯ã以äžã«çŠç¹ãåœãŠãå¯èœæ§ããããŸãïŒ
- ããŒãºã®ãããªãåæžïŒ çã«ãããŒãºã¬ã¹ããŸãã¯ãã»ãŒããŒãºã¬ã¹ããªã³ã¬ã¯ã·ã§ã³ãç®æããŸãã
- ããŒããŠã§ã¢æ¯æŽïŒ ããŒããŠã§ã¢ãGCæäœãã©ã®ããã«æ¯æŽã§ããããæ¢æ±ããŸãã
- AI/MLé§åã®GCïŒ æ©æ¢°åŠç¿ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®åäœãã·ã¹ãã è² è·ã«åçã«GCæŠç¥ãé©å¿ãããå¯èœæ§ããããŸãã
- çžäºéçšæ§ïŒ ç°ãªãGCå®è£ ãšèšèªéã®ããè¯ãçµ±åãšçžäºéçšæ§ã
çµè«
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¯ãçŸä»£ã®ã©ã³ã¿ã€ã ã·ã¹ãã ã®åºç€ã§ãããã¢ããªã±ãŒã·ã§ã³ãã¹ã ãŒãºãã€å¹ççã«å®è¡ãããããã«ã¡ã¢ãªãéãã«ç®¡çããŠããŸããåºæ¬çãªããŒã¯ïŒã¹ã€ãŒãããè¶ äœã¬ã€ãã³ã·ã®ZGCãŸã§ãåã¢ã«ãŽãªãºã ã¯ã¡ã¢ãªç®¡çãæé©åããäžã§ã®é²åã®äžæ©ã衚ããŠããŸããäžçäžã®éçºè ã«ãšã£ãŠããããã®æè¡ããã£ãããšçè§£ããããšã¯ã倿§ãªã°ããŒãã«ç°å¢ã§æåã§ãããããããã©ãŒãã³ã¹ãé«ããã¹ã±ãŒã©ãã«ã§ãä¿¡é Œæ§ã®é«ããœãããŠã§ã¢ãæ§ç¯ããåãšãªããŸãããã¬ãŒããªããçè§£ãããã¹ããã©ã¯ãã£ã¹ãé©çšããããšã§ãç§ãã¡ã¯GCã®åãæŽ»çšããŠã次äžä»£ã®åªããã¢ããªã±ãŒã·ã§ã³ãåµé ããããšãã§ããŸãã