ã©ãã§ãæçµçãªå·çã®æ¯æè ãšåœŒãã®å察è ã®éã®è«äºã¯ãå ã®å°ã£ããããŠéãã®è°è«ã«äŒŒãŠããŸãã ä»ã®äžéšã®ã³ãã¥ããã£ãšåæ§ã«ãåœç€Ÿã§ã¯ãã®äœè¿·ããçŽäºãäœå¹Žãç¶ããŠããŸãã ãããŠããªãã£ãŒãã»ãŠã©ãŒããŒãã³ã«ãããã®èšäºã ããã倩æãåªäœã«ç«ã€ããšãå¯èœã«ããŸããã
äœèšã£ãŠãã®ïŒ
çã話ããå§ããŸãããã æ°é±éåã«ãããã€ãã®ã¡ãœããããæçµä¿®é£Ÿåãåé€ããããã«ãJavaã³ã¢ã©ã€ãã©ãªã¡ãŒãªã³ã°ãªã¹ãã«ææ¡ãéããŸããã ãã®çµæãè°è«ã®ããã®ããã€ãã®ãããã¯ãçºçããŸããã ããšãã°ããã®ãã¡ã®1ã€ã¯ã ãã¡ã€ãã«ãåé€ãããå Žåã ãã¡ã€ãã«ã ã£ãã¡ãœããã®åŒã³åºãã®ããã©ãŒãã³ã¹ãã©ã®çšåºŠäœäžãããã調ã¹ãããšã§ãã
ããã©ãŒãã³ã¹ã®äœäžãçºçãããã©ããã«ã€ããŠããã€ãèããŸããããæåã«ããã®åé¡ã«é¢ãããã³ãããŒã¯çµæãæ¢ã«å ¬éããŠãã人ãããªããã©ããã確èªããããšããŸããã æ®å¿µãªãããäœãèŠã€ãããŸããã§ããã ããã¯ãããããååšããªãããšãä»ã®äººãç¶æ³ã調æ»ããªãã£ãããšãæå³ãããã®ã§ã¯ãããŸããããå°é家ã®ã¬ãã¥ãŒã«åæ Œããã³ãŒãã¯èŠãŸããã§ããã ããã§ã¯ãããã€ãã®ãã³ãããŒã¯ãäœæããŸãã
ãã³ãããŒã¯æ¹æ³è«
ããã§ããã³ãããŒã¯ã«ãã°ãããJMHãã¬ãŒã ã¯ãŒã¯ã䜿çšããããšã«ããŸããã ãã¬ãŒã ã¯ãŒã¯ãæ£ç¢ºãªãã³ãããŒã¯çµæãåŸãã®ã«åœ¹ç«ã€ãã©ãã確信ããªãå Žåã¯ããã¬ãŒã ã¯ãŒã¯ã®äœè ã§ããAlexey ShipilevïŒ@TheShadeïŒããŸãã¯ãããã©ã®ããã«åœ¹ç«ã€ãã説æããæ¬åœã«ã¯ãŒã«ãªNitsan Wakartããã° ã«ãããã®ãã¬ãŒã³ããŒã·ã§ã³ã ã芧ãã ãã ã
ç§ã®å Žåãã¡ãœããåŒã³åºãã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžãããã®ãç解ãããã£ãã®ã§ãã ã¡ãœããåŒã³åºãã®ããŸããŸãªããªãšãŒã·ã§ã³ãè©ŠããŠããããã®ã³ã¹ãã枬å®ããããšã«ããŸããã äžé£ã®åºæºãæã¡ãäžåºŠã«1ã€ã®èŠå ã®ã¿ãå€åãããããšã§ãããŸããŸãªèŠå ãŸãã¯ãããã®çµã¿åãããã¡ãœããåŒã³åºãã®ã³ã¹ãã«ã©ã®ããã«åœ±é¿ããããç解ã§ããŸãã
ã€ã³ã©ã€ã³å
åæã«ãæãæçœãªåœ±é¿èŠå ã¯ãã¡ãœããããŸã£ããåŒã³åºããããã©ããã§ãã å®éã®ã¡ãœããåŒã³åºãã¯ãã³ã³ãã€ã©ãŒã«ãã£ãŠéåžžã«æé©åãããããããŸã£ããæ®ã£ãŠããŸããã äžè¬çã«ãé話ã®ã³ã¹ããåæžããã«ã¯2ã€ã®æ¹æ³ããããŸãã 1ã€ã¯ã¡ãœããèªäœãçŽæ¥åã蟌ãããšã§ããã1ã€ã¯ã€ã³ã©ã€ã³ãã£ãã·ã¥ã䜿çšããããšã§ãã å¿é ããªãã§ãã ãã-ãããã¯éåžžã«åçŽãªæŠå¿µã§ãããæŽçãã¹ãçšèªãå°ããããŸãã barãšåŒã°ããã¡ãœãããå®çŸ©ããFooãšåŒã°ããã¯ã©ã¹ããããšæ³åããŠãã ããã
class Foo { void bar() { ... } }
次ã®ãããªã³ãŒããèšè¿°ããããšã§ãbarã¡ãœãããåŒã³åºãããšãã§ããŸãã
Foo foo = new Foo(); foo.bar();
ããã§ã®äž»ãªãã®ã¯ãbarãå®éã«åŒã³åºãããå Žæã§ã-foo.barïŒïŒ- CallsiteãšåŒã°ããŸã ã ã¡ãœãããã€ã³ã©ã€ã³ïŒãã«ãã€ã³ïŒã§ãããšèšããšããããã¯ã¡ãœãããåŒã³åºã代ããã«ã¡ãœããã®æ¬äœãååŸãããã³ãŒã«ãµã€ãã«æ¿å ¥ãããããšãæå³ããŸãã å€ãã®å°ããªã¡ãœããã§æ§æãããããã°ã©ã ã®å ŽåïŒããã°ã©ã ãäœæããæ¹ãæ£ãããšæããŸãïŒãåã蟌ã¿ãè¡ããšå€§å¹ ã«é«éåã§ããŸãã ããã¯ãããã°ã©ã ãäœæ¥ãè¡ã代ããã«ã¡ãœããåŒã³åºãã«ã»ãšãã©æéãè²»ãããªãããã§ãïŒ CompilerControlã¢ãããŒã·ã§ã³ã䜿çšããŠãã¡ãœãããJMHã«çµã¿èŸŒãŸããŠãããã©ãããå¶åŸ¡ã§ããŸãã ã€ã³ã©ã€ã³ãã£ãã·ã¥ã®æŠå¿µã«å°ãæ»ããŸãã
éå±€ã®æ·±ããšã¡ãœããã®åå®çŸ©
ã¡ãœããããæçµããŒã¯ãŒããåé€ããããšã«ããå Žåãããã¯ããããªãŒããŒã©ã€ãã§ããããšãæå³ããŸãã ãããèæ ®ãã¹ãèŠçŽ ã§ãã ãã®ãããã¡ãœãããååŸããã¯ã©ã¹éå±€ã®ããŸããŸãªã¬ãã«ã§ã¡ãœãããåŒã³åºããŸããã éå±€ã®ããŸããŸãªã¬ãã«ã§åå®çŸ©ãããã¡ãœããããããŸããã ããã«ãããã¯ã©ã¹éå±€ãšã¡ãœãããªãŒããŒã©ã€ããšã®çžäºäœçšã®çšåºŠãå€æã§ããŸããã
å€å
åã«ã³ãŒã«ãµã€ãã®ã¢ã€ãã¢ã«ã€ããŠèšåãããšããç§ã¯ã²ããã«ããªãéèŠãªè³ªåãåé¿ãããã£ãã éæçµã¡ãœããã¯ãµãã¯ã©ã¹ã§ãªãŒããŒã©ã€ãã§ãããããåŒã³åºããµã€ãã¯ããŸããŸãªã¡ãœãããåŒã³åºãããšã«ãªããŸãã ã ããå€åç§ã¯FooãŸãã¯ãã®åã¯ã©ã¹Bazãæ±ã£ãŠããããããbarïŒïŒãå®è£ ããŠããŸãã ã³ã³ãã€ã©ã¯ã©ã®ã¡ãœãããåŒã³åºãããã©ã®ããã«ç¥ãã®ã§ããïŒ Javaã®ãã¹ãŠã®ã¡ãœããã¯ããã©ã«ãã§ä»®æ³ïŒåå®çŸ©å¯èœïŒã§ãããåŒã³åºãããšã«ãããããä»®æ³ã¡ãœããããŒãã«ïŒvtableïŒã§æ£ããã¡ãœãããæ¢ãå¿ èŠããããŸãã ããã¯ããªãé ããããæé©åã³ã³ãã€ã©ã¯åžžã«ãã®ãããªæ€çŽ¢ã®ã³ã¹ããåæžããããšããŸãã åè¿°ã®ã¢ãããŒã-ã€ã³ã©ã€ã³åãŸãã¯åã蟌ã¿-ã¯ãç¹å®ã®åŒã³åºããµã€ããç¹å®ã®ã¡ãœããå®è£ ã1ã€ããåŒã³åºããªãããšãã³ã³ãã€ã©ã蚌æã§ããå Žåã«ãããŸãæ©èœããŸãã ããã¯ãåçžã³ãŒã«ãµã€ããšåŒã°ããŸãã
æ®å¿µãªãããã»ãšãã©ã®å ŽåãCallsiteãå³å¯ã«åçžã§ããããšã蚌æããããšã¯æçµçã«éå®çšçã§ãã JITã³ã³ãã€ã©ã¯éåžžãã³ãŒã«ãµã€ãã§åŒã³åºãããåããããã¡ã€ãªã³ã°ããæåã®Nã³ãŒã«ã§ã³ãŒã«ãµã€ããåçžã§ããå Žåãåžžã«åçžã§ãããšããä»®å®ã«åºã¥ããææ©çæé©åã«å€ãããšä»®å®ããŠã代æ¿ã¢ãããŒããæ¡çšããŸãã ãã®ãããªææ©çæé©åã¯éåžžã¯æ£ããã§ãããåžžã«ãããšã¯éããŸããã ãããã£ãŠãã³ã³ãã€ã©ã¯ãã¡ãœãããåŒã³åºãåã«ã»ãã¥ãªãã£ãå®è£ ããŠãã¡ãœãããåŒã³åºããããªããžã§ã¯ãã®ã¿ã€ãã確èªããå¿ èŠããããŸãã
ãã ããæé©åãè¡ãã®ã¯åçžã³ãŒã«ãµã€ãã ãã§ã¯ãããŸããã å€ãã®ã³ãŒã«ãµã€ãã¯ã圌ããèšãããã«ããã€ã¢ãŒãã£ãã¯ã§ã-ããªãã¡ã åŒã³åºãããšãã§ãã2ã€ã®ã¡ãœããããããŸãã ã»ãã¥ãªãã£ã³ãŒãã䜿çšããŠãã€ã¢ãŒãã£ãã¯ã³ãŒã«ãµã€ããåã蟌ã¿ãã©ã®å®è£ ãåŒã³åºããã確èªããŠããç¶è¡ã§ããŸãã ããã¯ãå®å šãªã¡ãœããåŒã³åºããããå®äŸ¡ã§ãã ããã«ãã€ã³ã©ã€ã³ãã£ãã·ã¥ã䜿çšããŠãã®ã±ãŒã¹ãæé©åã§ããŸãã ã€ã³ã©ã€ã³ãã£ãã·ã¥ã¯å®éã«ã¯ã¡ãœããã®æ¬äœãåŒã³åºããµã€ãã«åã蟌ã¿ãŸããããä»®æ³ã¡ãœããã®å®å šãªããŒãã«ã®ãã£ãã·ã¥ã®ããã«æ©èœããç¹å¥ãªãã©ã³ãããŒãã«ãæã£ãŠããŸãã Hotspot JITã³ã³ãã€ã©ã¯ãã€ã¢ãŒãã£ãã¯ã®çµã¿èŸŒã¿ãã£ãã·ã¥ããµããŒããã3ã€ä»¥äžã®å®è£ ãå¯èœãªã³ãŒã«ãµã€ããã¡ã¬ã¢ãŒãã£ãã¯ãšèŠãªããŸãã
ãããã£ãŠãæ¯èŒãšç 究ã§ã¯ã3çš®é¡ã®åŒã³åºããåºå¥ãããŸããåçžããã€ã¢ã«ããããã³å€§åœ¢ã®åŒã³åºãã®å Žåã§ãã
çµæ
çµæãã°ã«ãŒãåããŠãæšã®äžã§æ£®ãèŠãããšãã§ããŸãã ãããã®å°ãã®åæãšãšãã«ã也ç¥ããæ°å€ãæ瀺ããŸãã ç¹å®ã®æ°/ã³ã¹ãã¯ãå®éã«ã¯ããã»ã©èå³æ·±ããã®ã§ã¯ãããŸããã ããŸããŸãªã¿ã€ãã®ã¡ãœããåŒã³åºãéã®é¢ä¿ã¯èå³æ·±ãã®ã§ãçµ±èšèª€å·®ã¯ãããã§ãã æéãšæé ã®éã«ã¯ããªã倧ããªéãããããŸã-6.26åã§ãã å®éã«ã¯ã空ã®ã¡ãœããã®æéã枬å®ããããšã«é¢é£ããã³ã¹ãã®ããããã®å·®ã¯ãããããã倧ãããªããŸãã
ãããã®ãã³ãããŒã¯ã®ãœãŒã¹ã³ãŒãã¯GitHubã§å ¥æã§ããŸã ã æ··ä¹±ãé¿ãããããçµæã®äžéšãç°ãªããããã¯ã§æ瀺ããŸããã å€æ æ§ãã³ãããŒã¯ã¯å€æ æ§ãã³ãããŒã¯ã䜿çšããŠäœæãããæ®ãã¯JavaFinalBenchmarkã䜿çšããŠäœæãããŸãã
åçŽãªåŒã³åºã
Benchmark Mode Samples Mean Mean error Units cijJavaFinalBenchmark.finalInvoke avgt 25 2.606 0.007 ns/op cijJavaFinalBenchmark.virtualInvoke avgt 25 2.598 0.008 ns/op cijJavaFinalBenchmark.alwaysOverriddenMethod avgt 25 2.609 0.006 ns/op
æåã®çµæã»ããã¯ãä»®æ³ã¡ãœããã æçµã¡ãœãããããã³æ·±ãéå±€ã«å«ãŸããŠåå®çŸ©ãããã¡ãœãããåŒã³åºãã³ã¹ãã瀺ããŠããŸãã ãããã®ãã¹ãŠã®ã±ãŒã¹ã§ãã¡ãœãããåã蟌ãŸãªãããã³ã³ãã€ã©ãŒã«åŒ·å¶ããããšã«æ³šæããŠãã ããã ã芧ã®ãšãããæéã®å·®ã¯ãããããã§ãããæšæºåå·®ã¯ãããéèŠã§ã¯ãªãããšã瀺ããŠããŸãã ãããã£ãŠã æçµããŒã¯ãŒããè¿œå ããã ãã§ã¯ãé話ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšã¯ã§ããªããšçµè«ä»ããããšãã§ããŸãã ã¡ãœããããªãŒããŒã©ã€ãããŠã倧ããªéãã¯ãªãããã§ãã
ã·ã³ãã«ãªã³ãŒã«ãµã€ãã®åã蟌ã¿
Benchmark Mode Samples Mean Mean error Units cijJavaFinalBenchmark.inlinableFinalInvoke avgt 25 0.782 0.003 ns/op cijJavaFinalBenchmark.inlinableVirtualInvoke avgt 25 0.780 0.002 ns/op cijJavaFinalBenchmark.inlinableAlwaysOverriddenMethod avgt 25 1.393 0.060 ns/op
次ã«ãåã3ã€ã®ã±ãŒã¹ã䜿çšããŠãåã蟌ã¿å¶éãåé€ããŸãã ç¹°ãè¿ããŸããã æçµã¡ãœãããšä»®æ³ã¡ãœããã®åŒã³åºãã¯åãæéã«ãªããŸãã åã蟌ã¿ã®çŠæ¢ã®å Žåããã4åéããå®éã«åã蟌ã¿ã«ã¢ã«ãŠã³ãã«æžã蟌ã¿ãŸãã ã©ãã§ããªãŒããŒã©ã€ããããã¡ãœããã®åŒã³åºãã¯ã2ã€ã®éã§çµãããŸãã ããã¯ãã¡ãœããèªäœã«ãµãã¯ã©ã¹ã®å®è£ ãããã€ããããã³ã³ãã€ã©ãåãã§ãã¯ãæ¿å ¥ããå¿ èŠãããããã ãšæãããŸãã ãã®ä»çµã¿ã«ã€ããŠã¯ããå€æ æ§ãã»ã¯ã·ã§ã³ã§è©³ãã説æããŠããŸãã
ã¯ã©ã¹éå±€ã®åœ±é¿
Benchmark Mode Samples Mean Mean error Units cijJavaFinalBenchmark.parentMethod1 avgt 25 2.600 0.008 ns/op cijJavaFinalBenchmark.parentMethod2 avgt 25 2.596 0.007 ns/op cijJavaFinalBenchmark.parentMethod3 avgt 25 2.598 0.006 ns/op cijJavaFinalBenchmark.parentMethod4 avgt 25 2.601 0.006 ns/op cijJavaFinalBenchmark.inlinableParentMethod1 avgt 25 1.373 0.006 ns/op cijJavaFinalBenchmark.inlinableParentMethod2 avgt 25 1.368 0.004 ns/op cijJavaFinalBenchmark.inlinableParentMethod3 avgt 25 1.371 0.004 ns/op cijJavaFinalBenchmark.inlinableParentMethod4 avgt 25 1.371 0.005 ns/op
ãããŒãããã¯ã¡ãœããã®å€§ããªãããã¯ã§ãïŒ çªå·ä»ãã®ã¡ãœããåŒã³åºãïŒ1ã4ïŒã®ããããã¯ãã¡ãœãããã¯ã©ã¹éå±€ã®ã©ã®ãããæ·±ãåŒã³åºããããã瀺ããŠããŸãã ãããã£ãŠãparentMethod4ã¯ã4çªç®ã®èŠªã¯ã©ã¹ã§å®£èšãããã¡ãœãããåŒã³åºãããšãæå³ããŸãã æ°åãèŠããšã1ãš4ã®å·®ã¯éåžžã«å°ããã§ãã ãããã£ãŠãéå±€ã®æ·±ãã¯éèŠã§ã¯ãªããšçµè«ä»ããããšãã§ããŸãã åã蟌ã¿æã«ã¯ãå šå¡ãåããã¿ãŒã³ã«åŸããŸããéå±€ã®æ·±ãã¯é¢ä¿ãããŸããã ã€ã³ã©ã€ã³ã¡ãœããã®ããã©ãŒãã³ã¹ã¯inlinableAlwaysOverriddenMethodã«å¹æµããŸãããinlinableVirtualInvokeãããäœéã§ãã ç§ã¯åã³ãããåãã§ãã¯ã«åž°ããã§ãããã JITã³ã³ãã€ã©ãŒã¯ã¡ãœããããããã¡ã€ã«ããŠã1ã€ã ããçµã¿èŸŒãŸããŠããããšã確èªã§ããŸãããåžžã«ããã§ãããšèšŒæããããšã¯ã§ããŸããã
ã¯ã©ã¹éå±€ãfinalã¡ãœããã«äžãã圱é¿
Benchmark Mode Samples Mean Mean error Units cijJavaFinalBenchmark.parentFinalMethod1 avgt 25 2.598 0.007 ns/op cijJavaFinalBenchmark.parentFinalMethod2 avgt 25 2.596 0.007 ns/op cijJavaFinalBenchmark.parentFinalMethod3 avgt 25 2.640 0.135 ns/op cijJavaFinalBenchmark.parentFinalMethod4 avgt 25 2.601 0.009 ns/op cijJavaFinalBenchmark.inlinableParentFinalMethod1 avgt 25 1.373 0.004 ns/op cijJavaFinalBenchmark.inlinableParentFinalMethod2 avgt 25 1.375 0.016 ns/op cijJavaFinalBenchmark.inlinableParentFinalMethod3 avgt 25 1.369 0.005 ns/op cijJavaFinalBenchmark.inlinableParentFinalMethod4 avgt 25 1.371 0.003 ns/op
äžèšãšåãã¹ããŒã ã§ã- æçµçãªããŒã¯ãŒãã«ã¯æå³ããªãããã§ãã ããã§ã¯ãinlinableParentFinalMethod4ãåã蟌ã¿å¯èœã§ãããåãã§ãã¯ãé€å€ããŠããããšãçè«çã«èšŒæã§ãããšèããŸããããããã§ã¯ãªãããã§ãã
å€å
Monomorphic: 2.816 +- 0.056 ns/op Bimorphic: 3.258 +- 0.195 ns/op Megamorphic: 4.896 +- 0.017 ns/op Inlinable Monomorphic: 1.555 +- 0.007 ns/op Inlinable Bimorphic: 1.555 +- 0.004 ns/op Inlinable Megamorphic: 4.278 +- 0.013 ns/op
æåŸã«ãããªã¢ãŒãã£ãã¯ãã£ã¬ã³ãžã®ã±ãŒã¹ã«ã€ããŠèª¬æããŸãã 倧ãŸãã«èšã£ãŠãåçžåŒã³åºãã®ã³ã¹ãã¯ãåè¿°ã®éåžžã®ä»®æ³åŒã³åºãã®ã³ã¹ããšåãã§ãã ä»®æ³ã¡ãœããã®å€§ããªããŒãã«ãæ€çŽ¢ããå¿ èŠããããããçç©åããã³ã¡ã¬ã¢ã«ãã£ãã¯ã®ã±ãŒã¹ãåºçŸããã«ã€ããŠããããã¯é ããªããŸãã åã蟌ã¿ãæå¹ã«ãããšããã«ããããã¡ã€ãªã³ã°ã¯äžèŠã«ãªããåçžããã³çç©åã®ã³ãŒã«ãµã€ãã¯ãåãã§ãã¯ã䜿çšããçµã¿èŸŒã¿ã³ãŒã«ã®ã³ã¹ãã«ãªããŸãã ã¯ã©ã¹éå±€ã®å Žåãšéåžžã«äŒŒãŠããŸãããå°ãé ããªããŸãã ã¡ã¬ã¢ã«ãã£ãã¯ãªã±ãŒã¹ã¯äŸç¶ãšããŠéåžžã«é ãã§ãã ããã§ãåã蟌ã¿ãé²ãããã«Hotspotãèšå®ããªãã£ãããšãæãåºããŠãã ãããããã¯ããã€ã¢ã«ããããè€éãªã³ãŒã«ãµã€ãã®ããªã¢ãŒãã£ãã¯ã€ã³ã©ã€ã³ãã£ãã·ã¥ãå®è£ ããŸããã
ç§ãã¡ã¯äœãç解ããŠããŸããïŒ
ããŸããŸãªã¿ã€ãã®ã¡ãœããåŒã³åºããèšç®ããããŸããŸãªæéããããçç£æ§ã®ææ©çã¢ãã«ãæã£ãŠããªã人ããããŸããŸãªæéã䜿çšããŠããããšãç解ããŠãããå®éã«ã¯ç解ããŠããªã人ãå€ãããšã«æ³šæãã䟡å€ããããšæããŸãããã§ã ç§èªèº«ãããã§ãããééã£ãä»®å®ãããããã§ãã ã§ãããããã®ç 究ãããªãã®åœ¹ã«ç«ã€ããšãé¡ã£ãŠããŸãã 以äžã¯ãç§ããã®èšäºã§æå±ããè«æã®æŠèŠã§ãã
- ã¡ãœããåŒã³åºãã®æéã¿ã€ããšæé ã¿ã€ãã«ã¯å€§ããªéãããããŸãã
- å®éã«ã¯ã æçµããŒã¯ãŒããè¿œå ãŸãã¯åé€ããŠãå®éã«ã¯ããã©ãŒãã³ã¹ã«ã¯åœ±é¿ããŸããããåŸã§éå±€ãåç·šæãããšãããã»ã¹ã®é床ãäœäžãå§ããå ŽåããããŸãã
- ããæ·±ãã¯ã©ã¹éå±€ã¯ãé話ããã©ãŒãã³ã¹ã«å®éã®åœ±é¿ãäžããŸããã
- åçžåŒã³åºãã¯ããã€ã¢ã«ãåŒã³åºããããé«éã§ãã
- ãã€ã¢ã«ãã³ãŒã«ã¯ãã¡ã¬ã¢ãŒãã£ãã¯ã³ãŒã«ãããé«éã§ãã
- ãããã¡ã€ãªã³ã°ã®å Žåã«èŠãããã¿ã€ãããã§ãã¯ãããšããåçžæ§ã蚌æããããšãäžå¯èœãªãšããåçžæ§ãšæ¯èŒããŠåŒã³åºãã¯å°ãé ããªããŸãã
åãã§ãã¯ã®äŸ¡æ Œã¯ç§ã®å人çãªã倧ããªå瀺ãã ãšæããŸãã ããã¯ãã£ãã«è°è«ãããããã°ãã°ç¡èŠãããŠãããšç§ãèŠãŠãããã®ã§ãã
泚æãšè¿œå äœæ¥
ãã¡ãããããããã®åé¡ã«å¯Ÿããå¯äžã®å¯èœãªã¢ãããŒãã§ã¯ãããŸããïŒ
- ãã®èšäºã§ã¯ãåŒã³åºãã¿ã€ãã«é¢é£ããã¡ãœããåŒã³åºãã®ããã©ãŒãã³ã¹ã«åœ±é¿ããèŠå ã«çŠç¹ãåœãŠãŸãã ç§ãèšåããªãã£ã1ã€ã®èŠå ã¯ãåŒã³åºãã¹ã¿ãã¯ã®ãµã€ãºãŸãã¯æ·±ãã«å¿ããŠåã蟌ãŸããŠããã¡ãœãããåãå·»ããã¥ãŒãªã¹ãã£ãã¯ã§ãã ã¡ãœããã倧ããããå Žåãã¡ãœããã¯ãŸã£ããåã蟌ãŸãããã¡ãœãããåŒã³åºãããã®è²»çšãæ¯æãããšã«ãªããŸãã å°ãããèªã¿ãããã¡ãœãããèšè¿°ãããã1ã€ã®çç±ã
- ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããåŒã³åºãããããã®ç¶æ³ã«ã©ã®ããã«åœ±é¿ãããã«ã€ããŠã¯æ€èšããŠããŸããã ãããããããããšæãå Žåã¯ã Mechanical Sympathy Blogã«ã€ã³ã¿ãŒãã§ãŒã¹ã®ããã©ãŒãã³ã¹èª¿æ»ããããŸãã
- å®å šã«ç¡èŠããèŠå ã®1ã€ã¯ãä»ã®ã³ã³ãã€ã©æé©åã«å¯Ÿããåã蟌ã¿ã¡ãœããã®å¹æã§ãã ã³ã³ãã€ã©ãŒãæé©åãå®è¡ããå Žåã1ã€ã®ã¡ãœããã®ã¿ãåæããïŒããã»ã¹å æé©åïŒãå¹æçãªæé©åã®ããã«ã¯ãå¯èœãªéãå€ãã®æ å ±ãæ¬åœã«å¿ èŠã§ãã åã蟌ã¿ãå¶éãããšãä»ã®æé©åã§åäœããå¿ èŠã®ããã³ã³ããã¹ããå€§å¹ ã«æžããããšãã§ããŸãã
- ãã®åé¡ããã詳现ã«æãäžããããã«ã説æãã¢ã»ã³ãã©ãŒã®ã¬ãã«ã«ãªã³ã¯ããŸãã
ããããããããã¯ä»åŸã®æçš¿ã®ãããã¯ã§ãã
è¬èŸïŒ
-Alexey Shipilev ããã³ãããŒã¯ãžã®ãã£ãŒãããã¯ã
-Martin Thompson ãMartijn VerburgãSadiq Jafferã Chris Westã®ãŠãŒã¶ãŒãž-ç§ã®ããã°ã§éåžžã«åœ¹ç«ã€ãã£ãŒãããã¯ãšã³ã¡ã³ããã