パフりãƒŧマãƒŗã‚šīŧšį§ãŽåå‰ã¯äŊ•ã§ã™ã‹īŧŸ -大čĻæ¨Ąãƒ—ロジェクトでぎ最遊化ãĢé–ĸするAlexey Shipilev

パフりãƒŧマãƒŗã‚šãŽæœ€éŠåŒ–ã¯é•ˇã„é–“é–‹į™ēč€…ã‚’æ‚Šãžã›ãĻきãĻãŠã‚Šã€čˆˆå‘ŗæˇąã„ã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗとå„Ēれた原į¸žãŽä¸€į¨ŽãŽã€Œéģ„金ぎéĩ」ぎようãĢčĻ‹ãˆãžã™ã€‚ 前回ぎJPoint 2017で、大čĻæ¨Ąãƒ—ロジェクトぎ最遊化ぎä¸ģčĻãĒマイãƒĢ゚トãƒŧãƒŗīŧˆä¸€čˆŦ原則からトナップやįŸ›į›žãžã§īŧ‰ãŽå¤§čĻæ¨ĄãĒæĻ‚čĻãƒ„ã‚ĸãƒŧが、パフりãƒŧマãƒŗ゚ぎ専門åŽļであるAlexei ShipilevãĢよãŖãĻčĄŒã‚ã‚Œãžã—ãŸã€‚



ã‚Ģットぎ下-åŊŧぎãƒŦポãƒŧトぎデã‚ŗãƒŧド。

そしãĻ、ここでプãƒŦã‚ŧãƒŗテãƒŧã‚ˇãƒ§ãƒŗč‡ĒäŊ“ã‚’čĻ‹ã¤ã‘ることができぞすīŧš jpoint-April2017-perf-keynote.pdf

゚ピãƒŧã‚ĢãƒŧãĢついãĻ
Alexey Shipilev-10åš´äģĨ上ãĢわたるJavaパフりãƒŧマãƒŗã‚šãŽå•éĄŒã€‚ įžåœ¨ã¯Red Hatで働いãĻおり、そこでOpenJDKを開į™ēし、そぎパフりãƒŧマãƒŗã‚šãĢ取りįĩ„んでいぞす。 JMH、JOL、JCStressãĒお、OpenJDKぎいくつかぎã‚ĩブプロジェクトを開į™ēおよãŗã‚ĩポãƒŧトしぞす。 Red HatãĢå…Ĩį¤žã™ã‚‹å‰ã€åŊŧはIntelでApache HarmonyãĢ取りįĩ„ãŋ、そぎ垌OracleãĢč˛ˇåŽã•ã‚ŒãŸSun MicrosystemsãĢį§ģりぞした。 į”Ÿį”Ŗ性とマãƒĢチ゚ãƒŦãƒƒãƒ‰ãŽå•éĄŒãĢ取りįĩ„んでいる専門åŽļグãƒĢãƒŧプとã‚ŗミãƒĨニテã‚ŖãĢįŠæĨĩįš„ãĢé–ĸ与しãĻいぞす。

į§ã¯Red Hatで働いãĻいぞす。 äģĨ前、į§ãŒOracleで働いãĻいたとき、「ã‚ģãƒŧフハãƒŧバãƒŧ」゚ナイドをæŒŋå…Ĩしぞした。 čŖŊ品ãĢã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗを原čŖ…しようとしãĻいる場合、そこãĢäŊ•ãŒįœŸåŽŸã§äŊ•ãŒãã†ã§ãĒいかを教えãĻくれる専門åŽļを雇うことはį´ æ™´ã‚‰ã—いことです。

大īŧšé–‹į™ēぎ成功ぎåŸēæē–はäŊ•ã§ã™ã‹


čŖŊ品を開į™ēしãĻいるとしぞす。 あãĒたãĢとãŖãĻ成功するčŖŊ品とはäŊ•ã§ã™ã‹īŧŸ į§ãŸãĄã¯ã™ãšãĻ商į”¨ãƒ—ログナマãƒŧです。 ã‚ŗãƒŧデã‚ŖãƒŗグしたもぎぎįĩĻ与を支払うことで、č‡Ē分をæŦēくことができぞす。 しかし、原際ãĢは、čŖŊ品を提䞛するã‚ĩãƒŧビ゚ぞたはčŖŊ品全äŊ“ã‚’č˛ŠåŖ˛ã™ã‚‹ãŸã‚ãĢ、įĩĻ与が支払われぞす。



しかし、čŖŊ品ぎ成功ぎためぎį´”į˛‹ãĢ開į™ē上ぎåŸēæē–はäŊ•ã§ã™ã‹īŧˆãƒ“ジネ゚į›Žæ¨™ã‚’除くīŧ‰īŧŸ


そぎため、HabrÊでぎJavaぎパフりãƒŧマãƒŗã‚šãĢé–ĸする投į¨ŋをčĒ­ã‚“で、そこãĢ同様ぎã‚ŗãƒĄãƒŗãƒˆãŒčĄ¨į¤ēされãĻいることãĢ銚いãĻいぞす。



専門åŽļはæŦĄãŽã‚ˆã†ãĢčŋ°ãšãĻいぞす。 åŊŧåĨŗは元気ãĢ働いãĻいぞす。 į§ãŸãĄã¯æē€čļŗしãĻいぞす。すずãĻが順čĒŋです。」 しかし、ã‚ŗãƒĄãƒŗテãƒŧã‚ŋãƒŧがæĨãĻį­”えぞす。「4äēēぎ専門åŽļぎčĒ°ã‚‚がJavaをéĢ˜é€Ÿã¨čŠ•äžĄã—ãĻいãĒいことは非常ãĢ重čĻã§ã™ã€‚ むしろ、十分かつæē€čļŗぎいくもぎです。」

æ‚Ēã„ã¨č¨€ã„ãžã™ ビジネ゚ぎčĻŗį‚šã‹ã‚‰ã€ãƒ†ã‚¯ãƒŽãƒ­ã‚¸ãƒŧがビジネ゚åŸēæē–ã‚’æē€ãŸã—ãĻいる場合は、įĨžãĢ感čŦã—ぞすīŧ į§ã¯ã™ãšãĻをãĒめらかãĢ、゚ムãƒŧã‚ēãĢ、厌į’§ãĢčˆã‚ã‚‹ãšãã ã¨ã„ã†į†æƒŗä¸ģįžŠįš„ãĒč€ƒãˆã¯æŒãŖãĻいぞせん。 これはčĩˇã“りぞせん-通常、čŖŊ品ãĢはエナãƒŧがåĢぞれãĻいぞす。

æ­Ŗしいプログナムと速いプログナム


äēēã€…ã¯é•ˇã„é–“ã€ãƒ—ãƒ­ã‚°ãƒŠãƒ ãŽæ­ŖしさãĢついãĻäēŒé‡ãĢč€ƒãˆã‚‹ã“ã¨ã‚’å­Ļãŗぞした。 īŧˆč´čĄ†ãĢ尋ねるīŧ‰čĒ°ãŒåŊŧぎプログナムãĢバグがあるとæ­Ŗį›´ãĢč¨€ã†ã“ã¨ãŒã§ããžã™ã‹īŧŸ īŧˆãƒ›ãƒŧãƒĢãĢは多くぎ手がありぞすīŧ‰å¤§å¤šæ•°ã€‚ それでも、åŊŧらはč‡Ēåˆ†ãŸãĄãŽãƒ—ãƒ­ã‚°ãƒŠãƒ ãŒå¤šã‹ã‚Œå°‘ãĒかれæ­ŖしいとäŋĄã˜ãĻいぞす。 æ­ŖしいプログナムぎæĻ‚åŋĩは、éĢ˜é€Ÿãƒ—ログナムぎæĻ‚åŋĩと寞į§°įš„です。



「æ­Ŗしいプログナム」とは、ãƒĻãƒŧã‚ļãƒŧぎエナãƒŧãŒčĄ¨į¤ēされãĒいプログナムです。 つぞり、原際ãĢはエナãƒŧがありぞすが、ãƒĻãƒŧã‚ļãƒŧãĢčŖŊ品ぎčŗŧå…Ĩを拒åĻさせることはありぞせん。 「éĢ˜é€Ÿãƒ—ログナム」ãĢは寞į§°įš„ãĒįŠļæŗãŒã‚りぞす。パフりãƒŧマãƒŗã‚šãŽå•éĄŒãŒãĒいということではãĒく、ãƒĻãƒŧã‚ļãƒŧがäŊ•ã‹ã‚’åŽŸčĄŒã—ã‚ˆã†ã¨ã™ã‚‹ãŸãŗãĢã“ã‚Œã‚‰ãŽå•éĄŒãŒį™ēį”Ÿã™ã‚‹ã‚ã‘ではありぞせん。

「成功åŸēæē–ãĢ投čŗ‡ã—ぞした。」 成功ãĢは抟čƒŊとパフりãƒŧマãƒŗã‚šãŽä¸Ąæ–šãŽåŸēæē–がありぞす。プログナムが100ミãƒĒį§’ã‚’æ‹…åŊ“するぎが遊切です。 į­”えはīŧŸ さあ、先ãĢ進ãŋぞしょう。

「æ­Ŗしいプログナムぎバグぎ数は通常わかãŖãĻいぞす。」 これは、プロジェクトぎ成äēē期ぎ指標ぎ1つãĢ過ぎぞせん。プログナムãĢバグがãĒいということは、バグトナッã‚ĢãƒŧãĢバグをį™ģéŒ˛ã™ã‚‹ã“ã¨ã‚’čĒ°ã‚‚æ°—ãĢしãĒいということですīŧˆãƒĻãƒŧã‚ļãƒŧがいãĒいためですīŧīŧ‰ã€‚ パフりãƒŧマãƒŗã‚šãŽå•éĄŒãĢついãĻã‚‚åŒã˜čŠąã§ã™ã€‚ パフりãƒŧマãƒŗã‚šãŽå•éĄŒã¯æ—ĸįŸĨであり、これは「éĢ˜é€Ÿã€ãƒ—ãƒ­ã‚°ãƒŠãƒ ã§ã‚ã‚‹ã¨č¨€ã„ãžã™ã€‚ īŧˆčˆĒįŠēčĻ‹įŠã‚‚ã‚Šã‚’äŊœæˆīŧ‰


æ­ŖしいプログナムとéĢ˜é€Ÿãƒ—ãƒ­ã‚°ãƒŠãƒ ãŽä¸Ąæ–šã§ã€ã“ã‚Œã‚‰ãŽãƒ‘ãƒ•ã‚Šãƒŧマãƒŗ゚と抟čƒŊぎバグを回éŋする斚æŗ•ãŒįŸĨられãĻいぞす。 FAQãĢはæŦĄãŽã‚ˆã†ãĒã‚‚ãŽãŒã‚ã‚Šãžã™ã€‚ã€Œãã†ã™ã‚‹ã¨ã€å‚ˇã¤ããžã™ã€‚ ぞあ、 それをしãĒいでください 。」

プロジェクトぎ開į™ēæŽĩ階-ãã‚Œã‚‰ã¸ãŽæ›˛įˇšã€‚ W


į§ãŒãƒ‘フりãƒŧマãƒŗã‚šäŊœæĨ­ãĢ参加したãģとんおすずãĻぎプロジェクトは、いくつかぎ標æē–įš„ãĒ開į™ēフェãƒŧã‚ēをįĩŒãĻいぞす。 į§ã¯ã‹ã¤ãĻ、これらぎフェãƒŧã‚ēがæŦĄãŽã‚ˆã†ãĢãĒることを厚åŧåŒ–しぞした。



ã“ã‚Œã¯ãƒ‘ãƒŠãƒĄãƒˆãƒĒックグナフです。時間はポイãƒŗト「A」からポイãƒŗト「B」、「C」、「D」、「E」ãĢæĩã‚Œãžã™ã€‚ į¸Ļåē§æ¨™čģ¸ãĢæ˛ŋãŖãĻパフりãƒŧマãƒŗ゚があり、æ¨Ēåē§æ¨™čģ¸ãĢæ˛ŋãŖãĻæŠŊ蹥įš„ãĒã‚ŗãƒŧãƒ‰ãŽč¤‡é›‘ã•ãŒã‚ã‚Šãžã™ã€‚

通常、すずãĻは、ゆãŖくりとしかしゆãŖくりと動äŊœã™ã‚‹ãƒ—ロトã‚ŋイプをã‚ĩイクãƒĒãƒŗグするäēē々から始ぞりぞす。 į§ãŸãĄã¯č‡ĒčģĸčģŠãŒč‡Ē重で崊れãĒいようãĢč‡ĒčģĸčģŠã§čĩ°ã‚‹ãŽã§ã€ãã‚Œã¯éžå¸¸ãĢč¤‡é›‘ã§ã™ã€‚

最遊化が開始された垌、ゆãŖくりと、さぞざぞãĒ部分ぎ書き換えが開始されぞす。 こぎグãƒĒãƒŧãƒŗã‚žãƒŧãƒŗãĢいる開į™ēč€…ã¯ã€é€šå¸¸ã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧをäŊŋį”¨ã—ãĻ、明らかãĢã˛ãŠãæ›¸ã‹ã‚ŒãŸã‚ŗãƒŧドを書き換えぞす。 これãĢより、同時ãĢã‚ŗãƒŧãƒ‰ãŽč¤‡é›‘ã•ãŒčģŊ減されīŧˆä¸č‰¯éƒ¨åˆ†ã‚’排除するためīŧ‰ã€ãƒ‘フりãƒŧマãƒŗ゚が向上しぞす。

ポイãƒŗト「B」で、プロジェクトは「ä¸ģčĻŗįš„」ãĒ「įžŽã€ãŽãƒ”ãƒŧクãĢ達しぞす。これは、パフりãƒŧマãƒŗã‚šãŒč‰¯åĨŊで、čŖŊ品ぎすずãĻãŒč‰¯åĨŊであるようãĢčĻ‹ãˆã‚‹ã¨ãã§ã™ã€‚

さらãĢ、開į™ēč€…ãŒã‚ˆã‚ŠéĢ˜ã„パフりãƒŧマãƒŗ゚がåŋ…čĻãĒ場合は、よりæ­ŖįĸēãĒãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧを取垗し、遊切ãĒワãƒŧクロãƒŧドをäŊœæˆã—、ナットを慎重ãĢįˇ ã‚ã‚‹ã¨ã€ã‚¤ã‚¨ãƒ­ãƒŧã‚žãƒŧãƒŗãĢį§ģ動しぞす。 こぎプロã‚ģ゚で、åŊŧらはį”Ÿį”Ŗ性ぎためでãĒければåŊŧらがしãĒã„ã§ã‚ã‚ã†ã“ã¨ã‚’ãã“ã§čĄŒã„ãžã™ã€‚

さらãĢåŋ…čĻãĒ場合は、開į™ēč€…ãŒį”Ÿį”Ŗ性ぎ最垌ぎパãƒŧã‚ģãƒŗトを垗るためãĢčŖŊå“ã‚’ã˛ã­ã‚Šå§‹ã‚ã‚‹ã¨ã€ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã¯ãƒŦッドゞãƒŧãƒŗãĢãĒりぞす。 こぎゞãƒŧãƒŗでäŊ•ã‚’するかは明įĸēではありぞせん。 少ãĒくともこぎäŧšč­°į”¨ãŽãƒŦã‚ˇãƒ”ãŒã‚ã‚Šãžã™-JPoint / JokerConf / JBreakãĢčĄŒãã€čŖŊ品開į™ēč€…ã‚’æ‹ˇå•ã—ãĻã€ä¸‹åą¤ãŽæ›˛įŽ‡ã‚’įš°ã‚Ščŋ”すã‚ŗãƒŧドを書く斚æŗ•ã‚’教えãĻください。 原則としãĻ、čĩ¤ã„ã‚žãƒŧãƒŗãĢã¯ã€ä¸‹åą¤ã§į™ēį”Ÿã™ã‚‹å•éĄŒã‚’įš°ã‚Ščŋ”すもぎがあるからです。

ãƒŦポãƒŧトぎ掋りぎ部分では、これらぎ領域で通常äŊ•ãŒčĩˇã“ãŖãĻいるかをčŠŗしくčĒŦ明しぞす。

グãƒĒãƒŧãƒŗã‚žãƒŧãƒŗ


グãƒĒãƒŧãƒŗã‚žãƒŧãƒŗぎ動抟äģ˜ã‘ã‚Ģãƒŧドは、ブãƒĢãƒŧトフりãƒŧã‚šãĢよるã‚ŗãƒŧドぎバãƒĒとぎæˆĻいです。



ブãƒĢãƒŧトフりãƒŧ゚とは、æ­ŖįĸēãĒツãƒŧãƒĢがåŋ…čĻãĒいことを意å‘ŗしぞす。 グãƒĒãƒŧãƒŗã‚žãƒŧãƒŗãĢはいくつかぎį˛žįĨžįš„ãĒtrapがありぞす。

į§ãŽãŠæ°—ãĢå…Ĩりは、「æ­Ŗ常ãĢãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢするか、äŊ•ã‚‚しãĒい」です。



「ShipilevぎãƒŦポãƒŧãƒˆã‚’čžã„ãĻãã ã•ã„ã€‚é€šå¸¸ãŽãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢをäŊœæˆã™ã‚‹åŋ…čĻãŒã‚るかおうかを教えãĻくれぞす。」 į§ã¯ãã‚Œã‚’言ãŖたことがãĒい。 あãĒたがグãƒĒãƒŧãƒŗã‚žãƒŧãƒŗãĢいるとき、č¨ē断ぎį˛žåēĻはãģとんおåŊąéŸŋしぞせん。 そしãĻ、一čˆŦįš„ãĢč¨€ãˆã°ã€ã€Œãƒžã‚¤ã‚¯ãƒ­ã‚ĩãƒŧビ゚ãƒĸノãƒĒã‚šã€ãŽãŠãŽéƒ¨åˆ†ã‚’č¨˜čŋ°ã—たかをį†č§ŖするãĢã¯ã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグがåŋ…čĻã§ã™ã€‚最初ãĢ書き換えるåŋ…čĻãŒã‚りぞす。

ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグとč¨ē断


ブãƒŦãƒŗダãƒŗãƒģグãƒŦッグãĒおぎさぞざぞãĒクãƒŧãƒĢãĒパフりãƒŧマãƒŗ゚ぎį”ˇãŽãƒ–ログをčĻ‹ã‚‹ã¨ã€åŊŧはそぎようãĒ恐ろしいå›ŗã‚’čĄ¨į¤ēし、そぎようãĒツãƒŧãƒĢをäŊŋį”¨ã—ãĻ前垌ãĢčĻ‹ã‚‹ã“ã¨ãŒã§ãã‚‹ã¨č¨€ã„ãžã™īŧš



多くぎäēēは、これらぎチãƒŖãƒŧトをčĻ‹ã‚‹ã¨ã€ã€Œãƒ‘フりãƒŧマãƒŗ゚は非常ãĢé›Ŗã—ã„ãŽã§ã€ãã‚Œã¯ã—ãžã›ã‚“ã€ã¨č¨€ãŖãĻいぞす。 原際、ブãƒŦãƒŗダãƒŗãŽč€ƒãˆã¯ãã‚ŒãĢついãĻではありぞせんが それは、ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗでäŊ•ãŒčĩˇã“ãŖãĻいるかをčŋ…速ãĢčŠ•äžĄã™ã‚‹ãŸã‚ãŽã‹ãĒりį°Ąå˜ãĒæ–šæŗ•ãŒã‚るというäē‹åŽŸã§ã™ã€‚ 少ãĒくとも大čĻæ¨ĄãĒã‚ģãƒĢぎį†č§Ŗがあれば、はるかãĢč‰¯ããĒりぞす。

したがãŖãĻ、グãƒĒãƒŧãƒŗã‚žãƒŧãƒŗでぎč¨ē断は、非常ãĢ単į´”ãĒã‚ĸイデã‚ĸãĢåŸēãĨいãĻいぞす。ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗをčĻ‹ã‚‹ãŽã‚’恐れãĒいでください。 ã‚šã‚ŋックぎãƒĒã‚Ŋãƒŧã‚šãĢ不čļŗしãĻいるもぎを大čĻæ¨ĄãĢį†č§Ŗすることでさえ、æŗ¨æ„ã‚’æ‰•ã†äžĄå€¤ãŽã‚ã‚‹ã‚‚ãŽã¨ãã†ã§ãĒいもぎãĢついãĻãŽč€ƒãˆã‚’ã™ã§ãĢ与えãĻくれぞす。 厌全ãĒã‚ˇã‚šãƒ†ãƒ ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°ã‚’čĄŒãŖたとしãĻも、ボトãƒĢネックぎある場所はすでãĢ明įĸēãĢãĒãŖãĻいぞす。



ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグ


グãƒĒãƒŧãƒŗã‚žãƒŧãƒŗでぎį›Žæ¨™ã¯ã€ãŠã“で時間を過ごすかを大ぞかãĢį†č§Ŗすることです。



゚テã‚ŖックやドãƒŗグãƒĒから収集できるį´ æœ´ãĒãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠã§ã•ãˆã€ã‚°ãƒĒãƒŧãƒŗã‚žãƒŧãƒŗã§æ„č­˜įš„ãĒã‚ĸã‚¯ã‚ˇãƒ§ãƒŗã‚’åŽŸčĄŒã™ã‚‹ãŽãĢ十分ãĒæƒ…å ąã‚’æäž›ã—ãžã™ã€‚

æ‚ĒぎįŽĄį†č€…ãŒãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧぎイãƒŗ゚トãƒŧãƒĢã‚’č¨ąå¯ã—ãĻいãĒã„ãƒ—ãƒ­ãƒ€ã‚¯ã‚ˇãƒ§ãƒŗがある場合は、sshをäģ‹ã—ãĻjstackã‚’åŽŸčĄŒã—ã€ã€ŒtrueãŽã¨ãã€ã‚’åŽŸčĄŒã§ããžã™ã€‚ jstackã‚’åŽŸčĄŒã—ãžã™ã€‚ įĄįœ 1; 厌äē†ã—ぞした。」 これらぎjstackを1,000個収集し、集į´„しぞす。 これは「ニãƒŧãƒã‚¤ã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧãĢãĒり、čŖŊ品ぎäŊ•ãŒæ‚Ēいぎかを十分ãĢį†č§Ŗできぞす。

゚トップã‚Ļりッチを手ãĢå…ĨれãĻ、čŖŊ品ぎこぎ部分で時間ぎ80īŧ…を、čŖŊ品ぎこぎ部分で20īŧ…ã‚’č˛ģやしãĻいることãĢ感čŦã—ãĻいãĻも、äŊ•ãŒčĩˇã“るかãĢついãĻã‚ŗãƒŧヒãƒŧかすを推æ¸Ŧã™ã‚‹ã‚ˆã‚Šã‚‚č‰¯ã„ã§ã—ã‚‡ã†2005åš´ãĢVasyaがäŊœæˆã—たナãƒŗダムãĢäŊœæˆã•ã‚ŒãŸã‚¯ãƒŠã‚šã§äŊ•ã‹ã‚’äŋŽæ­Ŗしぞす。

パフりãƒŧマãƒŗã‚šæ¸Ŧ厚


ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグãĢé–ĸé€ŖするæŦĄãŽį˛žįĨžįš„ãĒtrapは、パフりãƒŧマãƒŗ゚を通常ãĢæ¸Ŧ厚するåŋ…čĻãŒã‚るか、ぞãŖたくæ¸Ŧ厚するåŋ…čĻãŒãĒいことをį¤ēしãĻいぞす。



į§ã¯ã„つもそれãĢついãĻčžã„ãĻいぞす。 しかし、攚善ぎグãƒĒãƒŧãƒŗã‚žãƒŧãƒŗでは、通常「プナ゚ぞたはマイナ゚1ã‚­ãƒ­ãƒĄãƒŧトãƒĢ」がį›Žã§čĻ‹ã‚‰ã‚Œãžã™ã€‚ 通常、åŊŧらはこれを「あãĒたはæ‚Ēいベãƒŗチマãƒŧクを持ãŖãĻいる、äŊ•ã‚‚襨į¤ēされãĻいãĒい、それは不十分ãĢ書かれãĻおり、パフりãƒŧマãƒŗã‚šã‚’æ­Ŗしくæ¸Ŧ厚するåŋ…čĻãŒã‚ã‚‹ã€ã¨ã„ã†æ–‡č„ˆã§č¨€ã„ãžã™ãŒã€åŒæ™‚ãĢ、ãģとんおすずãĻぎワãƒŧクロãƒŧドでčĻ‹ã‚‰ã‚Œã‚‹ãƒŦãƒŧキがありぞす。

道åžŗ


ãƒĸナãƒĢは非常ãĢã‚ˇãƒŗプãƒĢです。グãƒĒãƒŧãƒŗã‚žãƒŧãƒŗでは、äē›į´°ãĒ゚トãƒŦ゚テ゚トでも大きãĒæŦ é™ĨãŒčĄ¨į¤ēされぞす。



TwitterãĢå…Ŧ開ãƒĒãƒŗクをåŧĩãŖたり、ベãƒŧã‚ŋテ゚トãĢæĨãĻã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗを台į„Ąã—ãĢしたりするäēē々を集めるäģŖわりãĢ、JMeterで゚トãƒŦ゚テ゚トを書くぎãĢäŊ•é€ąé–“ã‚‚č˛ģやしãĻã„ã‚‹ã‚ąãƒŧã‚šã‚’čĻ‹ãĻããžã—ãŸã€‚ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧと一įˇ’ãĢåē§ãŖãĻ、čŊãĄãŸå ´æ‰€ã‚’įĸēčĒã—ぞすīŧ‰ã€‚ 通常ぎApache Benchでさえ、十分ãĢ十分ãĒæŦ é™Ĩをį¤ēしãĻいぞす。

開į™ē中ぎä¸ģčĻãĒæŦ é™ĨãĢé–ĸするこれらぎパフりãƒŧマãƒŗ゚デãƒŧã‚ŋをより旊く取垗するãģお、čŋ…速ãĢäŋŽæ­Ŗできぞす。 これは、į‰šãĢパフりãƒŧマãƒŗã‚šäŊœæĨ­ã‚’č¨ˆį”ģするぎãĢåŊšįĢ‹ãĄãžã™ã€‚

ã‚ĩプナイã‚ēぎ䞋


į§ã¯æœ€čŋ‘、JDK 9 Early AccessをäŊŋį”¨ã—ãĻ、æŦĄãŽã‚ˆã†ãĢč€ƒãˆãžã—ãŸã€‚ãã‚Œã‚’äŊŋį”¨ã—ãĻプロジェクトをビãƒĢドしようとするåŋ…čĻãŒã‚りぞす。



構į¯‰ä¸­ã§ã™ã€‚ã‚ŗãƒŗパイãƒĢ時間は2分から8分ãĢåĸ—えãĻいぞす。įĒį„ļ。 こぎįŠļæŗã§ã¯ã€ã“れがæœŦåŊ“ãĢ回帰であることをč¨ŧ明するためãĢã€ã“ãŽãŸã‚ãŽããĄã‚“ã¨ã—ãŸãƒ™ãƒŗチマãƒŧクを書くåŋ…čĻãŒã‚りぞすかīŧŸ



ã‚‚ãĄã‚ã‚“é•ã„ãžã™ã€‚ ビãƒĢドãĢį‰šåŽšãŽãƒã‚°ãŒã‚りぞすが、再įžå¯čƒŊです。 ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧでは、javacぎ有名ãĒ場所ãĢつãĒがるå‘ŧãŗå‡ēし゚ã‚ŋックがあることがわかりぞす。 こぎjavacでは、ã‚Ŋãƒŧã‚šã‚ŗãƒŧドがčĻ‹ã¤ã‹ã‚Šã€ãã“ãĢ2æŦĄãƒĢãƒŧプがčĻ‹ã¤ã‹ã‚Šãžã™ã€‚

æŦĄãŽã‚ˆã†ãĒ場合ãĢã€ã“ã‚ŒãŒå•éĄŒã§ã‚ã‚‹ã“ã¨ã‚’č¨ŧ明するåŋ…čĻãŒã‚りぞすかīŧŸaīŧ‰ãƒ¯ãƒŧクロãƒŧドがæ‚Ēい。 bīŧ‰ãã“ãĢį¤ēã•ã‚Œã‚‹ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢはいつありぞすかīŧŸcīŧ‰äēŒæŦĄã‚ĩイクãƒĢがæ‚Ēいというį†čĢ–įš„č€ƒå¯Ÿ いいえ、それで十分です。

最遊化


åˆĨぎį˛žįĨžįš„ãĒtrapīŧšã€Œæ™‚期尚旊ãĒ最遊化はすずãĻぎæ‚Ēぎ栚æēã§ã™ã€‚」



ã‚‚ãĄã‚ã‚“ã€KnutはぞだåĨ在です。 しかし、čĒ°ã‹ãŒã“ぎフãƒŦãƒŧã‚ēを思いå‡ēすたãŗãĢåŊŧがおぎį¨‹åēĻしゃãŖくりするかはわかりぞせん。ãĒぜãĒら、こぎフãƒŦãƒŧã‚ēは通常、čĒ¤ãŖãĻčĻšãˆã‚‰ã‚ŒãĻいるからです。 Knut氏ãĢよると、99.7īŧ…ãŽã‚ąãƒŧ゚では、時期尚旊ぎ最遊化がすずãĻぎæ‚Ēぎ栚æēã§ã‚り、äēē々は最遊化がåŋ…čĻãĒ場所をį†č§ŖしãĻいãĒいからです。 あãĒたがグãƒĒãƒŧãƒŗã‚žãƒŧãƒŗãĢいるとき、あãĒたは気ãĢしぞせん。 とãĢかくįžŽã—いã‚ŗãƒŧドを書きį›´ã—ぞす。 最初ãĢ書き換える内厚をæąē厚するãĢã¯ã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグがåŋ…čĻã§ã™ã€‚

おんãĒé€ščŠąãŒã‚ã‚Šãžã™ã‹īŧŸ

原則としãĻ、パフりãƒŧマãƒŗ゚ぎ攚善は、ä¸ģãĢ「æ‚Ēい」ã‚ŗãƒŧãƒ‰ã‚’ã€Œč‰¯ã„ã€ãĢ書き換えることです。 しかし、「æ‚Ēã„ã€ã¨ã€Œč‰¯ã„ã€ã¯ã€ã‚ã‚‹į¨‹åēĻä¸ģčĻŗįš„ãĒå‘ŗです。 少数ぎプログナマãƒŧãĢ尋ねãĻください。あãĒたはこぎようãĢåŋ…čĻãĒもぎをとãĻもįžŽã—ã„ã¨č¨€ã†ã§ã—ã‚‡ã†ã€‚ もう1äēēは「ここãĢäŊ•ã‚’書いたぎīŧã€ã¨č¨€ã†ã§ã—ょう。 ã‚‚ãĄã‚ã‚“ã€ã“ã‚Œã¯ã™ãšãĻå‘ŗわうことができぞすが、「Effective Java」というæœŦを書いたあãĒたやJoshua BlochãĢ悊ぞされãĻいるもぎをåĢむ、トãƒĒックãĢ悊ぞされることもありぞす。



たとえば、劚果įš„ãĒデãƒŧã‚ŋ構造。 グロãƒŧバãƒĢs / LinkedList / ArrayList / gがためらうことãĒくパフりãƒŧマãƒŗ゚を攚善したプロジェクトをįŸĨãŖãĻいぞす。 LinkedListぎ斚がéĢ˜é€ŸãĒ場合もありぞすが、これらぎ場合は非常ãĢį‰šæŽŠã§ã‚ã‚Šã€é€šå¸¸ã¯č‚‰įœŧでčĻ‹ã‚‹ã“とができぞす。

HashMapをäŊŋį”¨ã§ãã‚‹å ´æ‰€ã§ArrayListをįˇšåŊĸ検į´ĸしãĻいることãĢįĒį„ļ気äģ˜ãå ´åˆãŒã‚りぞす。 1įĩ„ぎkeySetとgetをįš°ã‚Ščŋ”しãĻ、entrySetãĢ変更するか、bubbleSortをåžĒį’°ã•ã›ãĻ、įĒį„ļ100万個ぎčĻį´ ãŽã‚ŗãƒŦã‚¯ã‚ˇãƒ§ãƒŗがそこãĢæĨãĻ、そこãĢ多くぎ時間をč˛ģやしãĻいる、ãĒおです。

グãƒĒãƒŧãƒŗã‚žãƒŧãƒŗãŽå°č¨ˆ




ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグは、æ—Ĩ々ぎ開į™ēãĢåŋ…čĻãĒ部分です。

į§ãŽčĻŗ察ãĢよると、パフりãƒŧマãƒŗã‚šãŽå•éĄŒãŽ95īŧ…ã¯æœ€åˆãŽãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグč¨Ē問でč§ŖæąēされãĻいぞす。 ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆãŽč¤‡é›‘ã•ãĢé–ĸäŋ‚ãĒく、įĩŒé¨“ぎあるäēē々がおぎようãĢプロジェクトを開į™ēしãĻも、プロジェクトぎ最初ぎプロフã‚ŖãƒŧãƒĢをäēē々ãĢčĻ‹ã›ã‚‹ã¨ã€åŊŧらは感情ぎį¯„å›˛ã€į‰šãĢ「į§ãŸãĄã¯éĻŦéšŋだ」と感じぞす。 ã“ã‚Œã‚‰ãŽå•éĄŒãŽ90īŧ…äģĨ上がč‡Ē明ãĢč§Ŗæąē可čƒŊであり、į†čĢ–įš„ãĢは、ã‚ŗミット前ãĢキãƒŖッチされるずきだãŖたからです。

テクニã‚ĢãƒĢエキ゚パãƒŧト、ã‚ĸãƒŧキテクト、テクニã‚ĢãƒĢデã‚ŖãƒŦクã‚ŋãƒŧ、ぞたはäģ–ぎä¸ģčĻãĒæŠ€čĄ“įš„地äŊã‚’占めãĻおり、į”Ÿį”Ŗ性がåŋ…čĻãĒ場合は、プロジェクトãĢãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧをčĩˇå‹•ã™ã‚‹ãŸã‚ãŽæ˜ŽįĸēãĒ指į¤ēがあることをįĸēčĒã—ãĻください。 ナイナãƒŧが1つ、ボã‚ŋãƒŗが1つ、ぞたはAPMを備えたWebã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗがある場合は、非常ãĢäžŋ刊です。 開į™ēč€…ã¯å¸¸ãĢこれをčŋ…速ãĢčĄŒã†æ–šæŗ•ã‚’持ãŖãĻいるåŋ…čĻãŒã‚りぞす。

į§ãŽįĩŒé¨“では、開į™ēč€…ãŽæ‰‹ã‚’å–ã‚Šã€åŊŧがいくら嚴をとãŖãĻも、åŊŧらと一įˇ’ãĢåē§ãŖãĻčŖŊå“ã‚’ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグすれば、パフりãƒŧマãƒŗã‚šäŊœæĨ­ãĢ寞するåŊŧぎ恐怖をįĸē原ãĢæ­ĸめることができぞす。 多くぎäēē々は、パフりãƒŧマãƒŗ゚がé›Ŗしいãģお、ã‚ŗãƒŗポãƒŧネãƒŗト間ãĢさぞざぞãĒį›¸äē’æŽĨįļšãŒã‚ã‚‹ãĒお、頭ぎ中ãĢそぎようãĒブロックを持ãŖãĻいぞす。 そしãĻ、åŊŧらはぞãŖãŸããƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグしぞせん。それはé›Ŗしいからです-つぞり、これぞでぎところ、それはåŋ…čĻã§ã¯ã‚りぞせん。 しかし、一åēĻåē§ãŖãĻ一įˇ’ãĢやると、åŊŧらはこぎブロックを削除し、č‡Ēåˆ†ã§ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢを開始しぞす。 そしãĻ、čĒ°ã‹ãŒæĨる前ãĢč§Ŗæąēできるエナãƒŧぎ90īŧ…は、プロフã‚ŖãƒŧãƒĢをčĻ‹ã›ãĻæĨをかかせ、äē‹å‰ãĢäŋŽæ­Ŗしぞす。

さらãĢ、「開į™ēč€…ãŽæ‰‹ã‚’å–ã‚Šãžã™ã€-これは、äŧšč­°ãĢ1000äēē収厚することを意å‘ŗしãĻいるわけではありぞせん。゚ピãƒŧã‚Ģãƒŧがå‡ēãĻきãĻ、゚マãƒŧトãĒ外čĻŗã§ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧãĢäŊ•ã‹ã‚’運ãŗ始めぞす。 これは抟čƒŊしぞせん。 動äŊœãŒį•°ãĒりぞす。プロジェクトぎį‰šåŽšãŽé–‹į™ēč€…ã¨ä¸€įˇ’ãĢåē§ãŖãĻ、ã‚ĢップãƒĢã§ãã‚Œã‚’čĄŒã„ãžã™ã€‚

イエロãƒŧã‚žãƒŧãƒŗ


イエロãƒŧã‚žãƒŧãƒŗは、パフりãƒŧマãƒŗ゚とåŧ•ãæ›ãˆãĢã‚ŗãƒŧãƒ‰ãŒč¤‡é›‘ãĢãĒることを意å‘ŗしぞす。これは、パフりãƒŧマãƒŗ゚を上げたくãĒい場合ãĢåŽŸčĄŒã—ãĒã„ã“ã¨ã‚’čĄŒã†å ´åˆã§ã™ã€‚



į˛žįĨžįš„ãĒtrapもありぞす。

ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグとč¨ē断


æœ€åˆãŽãƒĄãƒŗã‚ŋãƒĢトナップīŧšã€Œãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧをäŊŋį”¨ã—ãĻ、最遊化を開始する場所と斚æŗ•ã‚’įĸēčĒã—ぞす。」



éģ„č‰˛ãŽã‚žãƒŧãƒŗでは、エナãƒŧãŽäžĄæ ŧが上昇しãĻいることがわかりぞす。į”Ÿį”Ŗ性は垗られぞすが、äŋåŽˆæ€§ã€é–‹į™ēč€…ãŽįĄįœ ãĒお、äģŖわりãĢäŊ•ã‹ã‚’å¤ąã†ã“ã¨ãĢãĒりぞす。 したがãŖãĻ、éĢ˜åēĻãĒč¨ē断をåŋ…čĻã¨ã™ã‚‹éŠåˆ‡ãĒå¤‰æ›´ã‚’čĄŒã†åŋ…čĻãŒã‚ã‚Šã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグはč¨ē断ぎ一部ãĢすぎぞせん。 ベãƒŗチマãƒŧクãĒおもありぞす。

通常、äēē々はéģ„č‰˛ãŽã‚žãƒŧãƒŗを掘り下げãĻ、äŊ•ã‚’æœ€éŠåŒ–ã™ãšãã‹ã‚’č€ƒãˆå§‹ã‚ã‚‹ã¨ã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒŠãƒŧを開いãĻこれをčĻ‹ã‚‹īŧš



そしãĻ、ここでäŊ•ã‚’最遊化しぞすかīŧŸ java.nioで書き換えるか、最もホットãĒãƒĄã‚Ŋッドはjava.lang.Object.waitã§ã‚ã‚‹ã¨č¨€ã„ãžã™ã€‚ã¤ãžã‚Šã€ã‚Ēãƒŧバãƒŧクロックするåŋ…čĻãŒã‚りぞす。 ぞたは、Unsafe.parkがあるため、ã‚Ēãƒŧバãƒŧクロックするåŋ…čĻãŒã‚りぞす...ぞたはSocketInputStream.socketRead0、ぞたはsocketAccept-ネットワãƒŧã‚¯ãŒčĄ¨į¤ēされるため、すずãĻをįˇŠæ€ĨãĢNettyãĢ書き換えるåŋ…čĻãŒã‚ることを意å‘ŗしぞす。 įĸēかãĢ、こぎゴミはすずãĻJMXからぎもぎですが、3か月ぎ開į™ēぎ垌、これãĢついãĻは垌でįĸēčĒã—ぞす。 ぞたは、Object.hashCodeがありぞす-æ‚ĒいHotSpotがそれを最遊化しãĒかãŖたとしぞしょう。しかし、「すずãĻが速くãĻč‰¯ã„ã‚‚ãŽãĢãĒるとį´„束し、čŖŊ品はč˛Ŧäģģã‚’č˛ ã„ãžã›ã‚“ã€ã€‚

éģ„č‰˛ãŽã‚žãƒŧãƒŗぎ操äŊœæ–šæŗ•ã¯į°Ąå˜ã§ã™ã€‚æœ€éŠåŒ–ã€ã“ã‚Œã‚’čĄŒã†į†į”ąã‚’čĒŦ明するåŋ…čĻãŒã‚りぞす。 たãļんあãĒたč‡ĒčēĢぎためか、あãĒたぎプロジェクトマネãƒŧジãƒŖãƒŧぎためでしょう。

持ãŖãĻいることが望ぞしいīŧš


ã‚ĸムダãƒŧãƒĢぎæŗ•å‰‡


į”Ÿį”Ŗæ€§ã‚’čŠ•äžĄã™ã‚‹ãŸã‚ãĢã‚ŋ゚クを䞝é ŧすると、įĩŒé¨“ぎæĩ…いäēēãŒã˛ãŠãã”ãĄãã†ãĢãĒりぞす。ãĒぜãĒら、頭ぎ中ãĢ非įˇšåŊĸぎ䞝存é–ĸäŋ‚ã‚’įŊŽããŽã¯éžå¸¸ãĢé›Ŗしいからです。 これらぎ非įˇšåŊĸ䞝存é–ĸäŋ‚ぎ1つはã‚ĸムダãƒŧãƒĢぎæŗ•å‰‡ã§ã‚り、通常はæŦĄãŽã‚ˆã†ãĢãĒりぞす。

ã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗがあるとしぞす。 AとBぎ2つぎį‹ŦįĢ‹ã—た部分がありぞす。たとえば、A部分は70īŧ…ぎ時間で2倍加速し、B部分は30īŧ…ぎ時間で6倍加速しぞす。 分æ•Ŗã§ãã‚‹ãŽã¯ããŽã†ãĄãŽ1つだけです。これãĢは十分ãĒãƒĒã‚Ŋãƒŧ゚しかありぞせん。 ãŠãŽã‚ˇã‚šãƒ†ãƒ ã‚’ã‚ĒãƒŧバãƒŧクロックしぞすかīŧŸ 単ãĢグナフã‚Ŗã‚ĢãƒĢãĢ削減しãĻも、æŦĄãŽã“とがわかりぞす。



パãƒŧトAã¯ã€åˆč¨ˆæ™‚é–“ãŽ70īŧ…で抟čƒŊしぞす。 パãƒŧトAを2倍だけ加速するというäē‹åŽŸãĢもかかわらず、パãƒŧトAを最遊化することをお勧めしぞす。 全äŊ“įš„ãĒパフりãƒŧマãƒŗ゚へぎåŊąéŸŋが大きくãĒりぞす。

もしį§ãŒãƒ•ãƒĒãƒŧナãƒŗ゚ぎプログナマãƒŧãĒら、おそらくパãƒŧトBを6回ã‚Ēãƒŧバãƒŧクロックするでしょう。 į§ãŽé€ąå ąã§ã¯ã€ã“ぎ数字はもãŖã¨č‰¯ãčĻ‹ãˆã‚‹ã ã‚ã†īŧšã€ŒVasyaは2倍ãĢãĒり、į§ã¯2倍ãĢãĒãŖたぎで、įĩĻ料を3倍åĸ—やすåŋ…čĻãŒã‚る」。

ã‚ĸムダãƒŧãƒĢぎæŗ•å‰‡ã¯æŦĄãŽã‚ˆã†ãĢ推æ¸Ŧされぞす。



゚ピãƒŧドã‚ĸップSがある場合、厚įžŠãĢã‚ˆã‚Šã€åˆč¨ˆæ™‚é–“A + Bã‚’æ–°ã—ã„æ™‚é–“ã§å‰˛ãŖた値ãĢãĒりぞす。 パãƒŧトBは同じぞぞであるため、「プナ゚B」があり、パãƒŧトAはS A回減少しぞした。 こぎäģ˜éŒ˛ã§ãƒ‘ãƒŧトAとパãƒŧトBぎį›¸å¯žæ™‚é–“ã‚’į¤ēすパãƒŧトAとパãƒŧトBぎ 2ã¤ãŽčĄ¨č¨˜æŗ•ã‚’å°Žå…Ĩすると、æŦĄãŽåŧãĢãĒりぞす。


こぎ比įŽ‡ãĢはæĨŊしいį‰šæ€§ãŒã‚りぞす。 たとえば、S Aをį„Ąé™ãĢ向ける場合、åˆļ限Sīŧš


これは明らかãĒことではãĒく、į†č§ŖするためãĢč‡Ēåˆ†ãŽč‚Œã§äŊ•åēĻも感じるåŋ…čĻãŒã‚りぞす。 åŊŧらはここでそぎようãĒグナフを通しãĻあãĒたをį¤ēしぞすīŧš


...そしãĻč¨€ã†īŧšåŠ é€Ÿã™ã‚‹éƒ¨åˆ†ãŒ80īŧ…を占有するã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗがある場合、そぎポイãƒŗトぞで加速しぞすが、゚ピãƒŧドã‚ĸップが5倍をčļ…える場合、それは垗られぞせん。

これは、デãƒŧã‚ŋベãƒŧ゚ベãƒŗダãƒŧがあãĒたãĢæĨãĻ、æŦĄãŽã‚ˆã†ãĢ言ãŖãĻいることを意å‘ŗしぞす。デãƒŧã‚ŋベãƒŧ゚がワãƒŧクロãƒŧドぎ50īŧ…を占有しãĻいることがわかりぞす。 1čĄŒãŽã‚ŗãƒŧドを変更せずãĢįžåœ¨ãŽã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗをåŊ“į¤žãŽã‚‚ぎãĢ変更すると、パフりãƒŧマãƒŗ゚が10倍ãĢãĒることをäŋč¨ŧしぞす。 åŊŧãĢäŊ•ã¨č¨€ã‚ãĒければãĒらãĒいぎですかīŧŸ īŧˆčĻŗåŽĸからīŧ‰ãƒ–ãƒĢたわごとīŧ

さらãĢé€˛ã‚“ã§ãã ã•ã„īŧšã‚ĸムダãƒĢぎæŗ•å‰‡ãŽä¸€čˆŦ化がありぞす。 これらぎį”¨čĒžã‚’å°‘ã—ã˛ãŖくりčŋ”しãĻ、2ã¤ãŽæ–°ã—ã„čĄ¨č¨˜æŗ•ã‚’å°Žå…Ĩすると、pはéĢ˜é€ŸåŒ–され、AはAぎį‰šåŽšãŽéƒ¨åˆ†ã‚’分æ•Ŗさせた時間であり、alphaはäģ–ぎすずãĻぎ部分ぎ量です。こぎæŗ•å‰‡ã¯æŦĄãŽåŊĸåŧã§č¨˜čŋ°ã§ããžã™ã€‚



å•éĄŒã¯ã€ã“ã‚Œã‚‰ãŽãƒĄãƒŗバãƒŧãĢäŊ•ã‚‰ã‹ãŽį‰Šį†įš„意å‘ŗがあるということです。 é€šå¸¸ã€æœ€åˆãŽãƒĄãƒŗバãƒŧはä¸ĻčĄŒæ€§ã¨å‘ŧばれぞす 。 äģŠãŽã¨ã“ろ、2į•Ēį›ŽãŽį”¨čĒž-įĢļ合-をį„ĄčĻ–ã™ã‚‹ã¨ã€čĄ¨įžã¯æŦĄãŽã“とを意å‘ŗしぞすīŧšãƒ‘ãƒŧトAをäŊ•å›žåŠ é€Ÿã—たか、一čˆŦįš„ãĒ゚ピãƒŧドã‚ĸップをおれだけ垗たか。 įĢļ合は、ã‚ĸムダãƒĢぎæŗ•å‰‡ã§ã“れと同じæŧ¸čŋ‘įˇšã‚’提䞛するäģ–ぎすずãĻぎį”Ÿį”Ŗ性へぎåŊąéŸŋをčĒŦ明しãĻいぞす。 ところで、こぎé–ĸ数ぎグナフを描くと、ã‚ĸムダãƒĢぎæŗ•å‰‡ã¨åŒã˜æ›˛įˇšãŒåž—られぞすīŧš



ただし、原則としãĻ、ãģとんおぎ場合、こぎåŊĸåŧãŽã‚ĸムダãƒŧãƒĢぎæŗ•åž‹ã¯éŠį”¨ã•ã‚Œãžã›ã‚“。 ã‚ŗヒãƒŧãƒŦãƒŗ゚とå‘ŧばれる、ã‚ŗãƒŗポãƒŧネãƒŗト間ぎį›¸äē’äŊœį”¨ã‚’č¨˜čŋ°ã™ã‚‹åˆĨãŽãƒĄãƒŗバãƒŧがそこãĢčŋŊåŠ ã•ã‚Œã‚‹ã¨ã€ã‚ˆã‚Šč¤‡é›‘ãĒæŗ•å‰‡ãŒéŠį”¨ã•ã‚Œãžã™ã€‚



ã‚ĸãƒĢãƒ•ã‚Ąã¨ãƒ™ãƒŧã‚ŋãŒč˛ ã§ãĒい場合、éŖŊ和æŧ¸čŋ‘įˇšãŒãĒいことがわかりぞす。 äŊ•ã‚‰ã‹ãŽåŠšįŽ‡ãŽãƒ”ãƒŧクがあり、そぎ垌、į”Ÿį”Ŗ性がäŊŽä¸‹ã—始めぞす。 パフりãƒŧマãƒŗã‚šãĢé–ĸわる多くぎäēē々は、こぎæŗ•å‰‡ã‚’ãƒĻニバãƒŧã‚ĩãƒĢã‚šã‚ąãƒŧナビãƒĒテã‚Ŗæŗ•īŧˆUSLīŧ‰ã¨ã—ãĻ厚åŧåŒ–するぞで、č‡Ēåˆ†ãŽč‚Œã§æ„Ÿã˜ãĻいぞした。



ここでは、「晎遍įš„」およãŗ「æŗ•å‰‡ã€ãŽæĻ‚åŋĩがč‡Ēį„ļį§‘å­Ļįš„ãĒ意å‘ŗでäŊŋį”¨ã•ã‚ŒãĻいぞす。つぞり、į†čĢ–įš„ãĢæ­ŖåŊ“化されãĻいぞすが、分析įš„ãĢは導きå‡ēされãĻいぞせん。 これは、įĩŒé¨“įš„č¨ŧ拠ãĢぞで及ãļæŗ•åž‹ã¨ã—ãĻ推厚されぞす。

ã‚ĸãƒĢãƒ•ã‚Ąã¨ãƒ™ãƒŧã‚ŋがã‚ŧロãĢį­‰ã—ã„ã‚ˇã‚šãƒ†ãƒ ã¯ã‚ã‚Šãžã›ã‚“ã€‚ã‚ˇã‚šãƒ†ãƒ ãĢãƒĒã‚Ŋãƒŧã‚šã‚’čŋŊ加したり、äŊ•ã‹ã‚’最遊化したりする場合が多く、æ‚Ē化するためです。 たとえば、あるボトãƒĢネックを取り除いたが、åˆĨぎ重いボトãƒĢネックãĢãļつかりぞした。

パフりãƒŧマãƒŗã‚šæ¸Ŧ厚


パフりãƒŧマãƒŗã‚šã‚’æ¸ŦåŽšã™ã‚‹ãƒĄãƒŗã‚ŋãƒĢトナップãĢは、「すずãĻãŒč¤‡é›‘ã§ã‚ã‚Šã€ã™ãšãĻがパフりãƒŧマãƒŗã‚šãĢ与えるåŊąéŸŋがわからãĒいため、äŊ•ã‹ã‚’čĻ‹ã¤ã‘ãĻベãƒŗチマãƒŧクがį¤ēすことをįĸēčĒã™ã‚‹ã ã‘です」とありぞす。



原際、パフりãƒŧマãƒŗ゚テ゚トは非常ãĢéĢ˜äžĄã§ã‚り、į‰šãĢすずãĻをテ゚トすることはできぞせん。 パフりãƒŧマãƒŗ゚テ゚トは、抟čƒŊテ゚トīŧˆãƒĻニットテ゚トãĒおīŧ‰ãŒãƒ‘ãƒƒã‚¯ã§åŽŸčĄŒã•ã‚Œã‚‹å ´åˆã§ã‚‚ã€100ミãƒĒį§’äģĨ下で合æ ŧするというį‚šã§æŠŸčƒŊテ゚トとį•°ãĒりぞす。 パフりãƒŧマãƒŗ゚テ゚トでは、į‰Šäē‹ã¯ãã‚Œãģお゚ムãƒŧã‚ēではありぞせん。 1分äģĨ上からテ゚トãĢ合æ ŧし、数時間かかる場合がありぞす。 これは、1つぎ変更を数į™žæ™‚é–“ãŽãƒžã‚ˇãƒŗでテ゚トできることを意å‘ŗしぞす。 1æ—ĨãĢ大量ぎã‚ŗãƒŸãƒƒãƒˆã‚’čĄŒã†å ´åˆã€ãƒ†ã‚šãƒˆã‚ˇã‚šãƒ†ãƒ ã‚’äģ‹ã—ãĻäŊ•ã‚‰ã‹ãŽæ–šæŗ•ã§ã‚ĸクã‚ģ゚を提䞛するãĢは、非常ãĢ多くぎ抟器がåŋ…čĻã§ã™ã€‚

パフりãƒŧマãƒŗ゚テ゚トãĢは隔é›ĸがåŋ…čĻã§ã™ã€‚

原則としãĻ、パフりãƒŧマãƒŗ゚テ゚トは非バイナãƒĒãƒĄãƒˆãƒĒックを提䞛しぞす。 通常、抟čƒŊテ゚トは「PASS」ぞたは「FAIL」、つぞりバイナãƒĒãƒĄãƒˆãƒĒックをį¤ēし、パフりãƒŧマãƒŗ゚テ゚トは...「67」をį¤ēしぞす。 さらãĢæ‚ĒいことãĢは、åŊŧらは67ではãĒく、67プナ゚マイナ゚5ã¨č¨€ã„ãžã™ã€‚ これは、とりわけ、テ゚トエナãƒŧはデãƒŧã‚ŋをč§Ŗ析した垌ãĢぎãŋ検å‡ēされることを意å‘ŗしぞす。すずãĻがおこでも非常ãĢįžŽã—いことをį†č§ŖしãĻいるときですが、ここでは、暗い隅ãĢ、原験がį„ĻげãĻいることをį¤ēすデãƒŧã‚ŋがありぞす。 , .

, - , - — - , . , , , , , .

— . , , , .


: .



, ÂĢÂģ, , , end-to-end , , -. .

— , , .

, , — .

: — , — . () , . , — . , — real world . , , ÂĢreal worldÂģ. , . , , . ÂĢreal-worldÂģ, , , , .

— . , , . , , , , , . , , , . , , , , white paper- , , .. .


bull shit , , .


— , , .., ÂĢÂģ , , . , . .


, , bottleneck, . , , . .

. .


— , . 0, speedup . ( , , 2 ), , , , .


, , .

:



speedup , — speedup . , - , , , , .

, — . .



. - 50 , , 50 , . , , , , , , , — . , , , .

:
:


すãĒã‚ãĄ — .

:


, , , ( ), . , .

, . , ÂĢ - Âģ , . , , , , , , — , , . , .

最遊化


, , . :



ÂĢ , — 100 , a 110. , â€ĻÂģ - JPoint. , , , , - . , branch prediction - (, , -, ).

, , , . , . , ( , , ):

  1. , , — N^3, N log N. , , , , , ;
  2. , , , , , , . , PR , ;
  3. . , , , -;
  4. , . , , .


, , , - , , . , , , ..

JVM


: , , , JVM, ? : , ( , JVM).

, , . Google : ÂĢJVM tuning optionsÂģ. :


, - , ÂĢ JVMÂģ.

, . , , , . , , , .


, , parallelStream(), Eexecutor.submit, new Thread, . ? , , , - .

: , , . — , dispatching . staging, , . , , - , - -Hadoop, MapReduce; , . , , 10 000 , .. — , .


åˆĨぎ䞋。 : ÂĢ , - Integer Java — , int Âģ.

, ÂĢint- — Âģ , , , . , , : , , ( , - , , , ), JDK - Valhalla.


Modus operandi: — , , , . .

50% , . : , , ÂĢ Âģ .

, 80% ( 83% , , ).

. , , , , , , . . , , , , , . , .


: , . — , , . , .


, , - , , : ÂĢ Âģ!

— .



例īŧš



ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグとč¨ē断



通常、čĒ°ã‚‚がåļį„ļこぎゞãƒŧãƒŗãĢčĄŒãį€ããžã™ã€‚ 可čƒŊãĒすずãĻぎã‚Ēãƒ—ã‚ˇãƒ§ãƒŗが選択されると、åŊŧらはč‡Ē分č‡ĒčēĢãĢč¨€ã„ãžã™īŧšã€Œãã‚Œã§ã¯ã€æŦĄãĢäŊ•ã‚’ã™ãšãã‹ã‚’č€ƒãˆãžã™ã€‚ã€ そしãĻ、あãĒãŸãŒé•ˇã„é–“ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢをčĻ‹ã‚‹ã¨ã€ã‚ãĒたはč§Ŗæąēį­–ã‚’čĻ‹ã‚‹ã“とができるようです。 åŊŧらはæąē厚がé›Ŗしいことをį†č§ŖしãĻいぞす。つぞり、čĻ‹ã‚‹ãŽãĢé•ˇã„æ™‚é–“ãŒã‹ã‹ã‚‹ã“ã¨ã‚’æ„å‘ŗしぞす。



原際、ãƒŦッドゞãƒŧãƒŗをハッキãƒŗグするčƒŊ力は、可動部分ぎį›¸äē’äŊœį”¨ã‚’į†č§Ŗすることからį”Ÿãžã‚Œãžã™ã€‚ そしãĻ、こぎ場所ãĢはパフりãƒŧマãƒŗã‚šã‚ĸãƒŧテã‚Ŗ゚トがį™ģ場しぞす。これらはį‰šãĢäģ–ぎすずãĻãĢ専åŋĩしãĻいるわけではありぞせんが、一åēĻãĢすずãĻぎãƒŦイヤãƒŧを掘り下げることができぞす。 åŊŧã‚‰ã¯æ­ŠčĄŒį™žį§‘äē‹å…¸ã§ã‚り、頭ぎ中ãĢはそぎようãĒįŠļæŗã§åƒããƒãƒƒã‚¯ãŽã‚ģットがありぞす。 åŊŧらは遊į”¨ãŽé™į•Œã‚’įŸĨãŖãĻいぞす。 最も重čĻãĒぎは、これらぎäēē々は、čĻ‹æ…ŖれãĒいがらくたをčĻ‹ãĻもwhenį„ļとしãĒいが、それを勉åŧˇã—始めるäēē々です。

äŊ•ã‚‚明įĸēでãĒã„ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢãŒčĄ¨į¤ēã•ã‚ŒãŸå ´åˆã€ã€Œã§ã¯ã€ã“ãŽãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢを削除しãĻ、新しいデãƒŧã‚ŋã‚’ã‚‚ãŸã‚‰ã™åŽŸé¨“ã‚’ã—ãžã—ã‚‡ã†ã€ã¨č¨€ã„ãžã™ã€‚ デãƒŧã‚ŋを収集するäŊ“įŗģįš„ãĒ帰į´įš„æ–šæŗ•ãŒã“こで抟čƒŊしぞす。 åŊŧらぎためãĢ勉åŧˇã™ã‚‹ã¨ã„うことは、ã‚ŗãƒŧドをダã‚ĻãƒŗロãƒŧドしãĻStackOverflowãĢ投į¨ŋし、「こぎようãĒパフりãƒŧマãƒŗã‚šãŽå•éĄŒã¯ã‚ã‚Šãžã™ã‹īŧŸã€ã¨å°‹ã­ã‚‹ãŽã§ã¯ãĒく、John SkeetãĒおぎäēē々がæĨã‚‹ãŽã‚’åž…ãĄãžã™ã€‚åŊŧらはそこでおぎようãĢ、äŊ•ã‚’するåŋ…čĻãŒã‚るかを教えãĻくれぞす。 勉åŧˇã¨ã¯ã€ãƒ‰ã‚­ãƒĨãƒĄãƒŗトをčĒ­ã‚“ã ã‚Šã€č¨˜äē‹å†…ãŽå‚č€ƒæ–‡įŒŽã‚’æŽĸしたり、原験をしたり、同僚からįŸĨč­˜ã‚’åŧ•ãå‡ēしたり、äŊ•ã‚‰ã‹ãŽæ–šæŗ•ã§æ•´į†ã—たりすることです。 多くぎäēē々がこぎためãĢäŧšč­°ãĢæĨぞす。

äŧšč­°ãŽã‚ŗツ


åˆĨãŽãƒĄãƒŗã‚ŋãƒĢトナップがありぞすīŧšã€Œé•ˇã„é–“äŧšč­°ãĢ行ãŖた場合、いつかいくつかぎäŧšč­°ã§åŊŧらはį§ãŸãĄãŽãƒ—ロジェクトを5倍攚善するトãƒĒックをäŧãˆã€ããŽåžŒãƒã‚ąãƒƒãƒˆãĢč˛ģやしたäēˆįŽ—å…¨äŊ“を取りæˆģしぞす。」



原際、į‰šåŽšãŽã‚ąãƒŧ゚では、1000回ぎäŋå­˜ãŽã†ãĄ1つぎäŊŽãƒŦベãƒĢぎトãƒĒックです。 æĩˇčžēで夊気を垅つよりもč‡Ē分でčĻ‹ã¤ã‘る斚がį°Ąå˜ã§ã™ã€‚ プログナミãƒŗグパãƒŧテã‚Ŗãƒŧで最もéĸį™Ŋいぎは、パフりãƒŧマãƒŗã‚šãĢé–ĸã™ã‚‹č­°čĢ–ぎãģとんおがäŊŽãƒŦベãƒĢぎハッキãƒŗグãĢé–ĸするもぎだということです。



原則としãĻ、これらすずãĻぎことは、プロジェクトぎプログナマãƒŧが単į´”ãĒã‚ĸãƒĢゴãƒĒã‚ēム変換をäŊŋį”¨ã—ãĻ、パフりãƒŧマãƒŗã‚šã‚’äŊ•å€ã‚‚攚善できるįŠļæŗã§į™ēį”Ÿã—ぞす。 しかし、åŊŧらはäŧšč­°ã§ã‚šãƒžãƒŧトHotSpotがäŊ•ã‚‰ã‹ãŽåŊĸでã‚ŗãƒŗパイãƒĢã•ã‚Œã‚‹ã¨č¨€ã‚ã‚ŒãŸãŽã§ã€HotSpotでうぞくã‚ŗãƒŗパイãƒĢされるようãĢプロジェクトをäŋŽæ­Ŗするåŋ…čĻãŒã‚るぎで、åŊŧらはä¸ģãĒもぎをčĻ‹é€ƒã—ãĻいぞす-åŊŧらは原際ãĢč‡Ē分でčĻ‹ã¤ã‘ることができる変更を持ãŖãĻいぞすéĢ˜é€Ÿã§ã™īŧ‰ã€ãƒ‘フりãƒŧマãƒŗ゚が向上しぞす。

æžč‘‰æ–


ãƒŦッドゞãƒŧãƒŗãĢいãĻ、こぎį¨ŽãŽäŊŽãƒŦベãƒĢぎ違いをčĻ‹ã¤ã‘た場合、原際ãĢはãģとんおぎ場合、ã‚Ēプテã‚Ŗマイã‚ļãƒŧぎ原čŖ…ぎ違いですīŧˆä¸Šč¨˜ãŽã‚ąãƒŧ゚ぎ多くは原際ãĢ同じようãĢ抟čƒŊするはずですīŧ‰ã€‚ ただし、ハッキãƒŗグは一時įš„ãĒパッチであり、プロジェクトぎåŸēį›¤ã§ã¯ã‚りぞせん。



原則としãĻ、それらは下ぎãƒŦイヤãƒŧãŽå•éĄŒã‚’į¤ēしぞす。下ぎãƒŦイヤãƒŧは原際ãĢはよりåĨ全ãĒパフりãƒŧマãƒŗã‚šãƒĸデãƒĢを提䞛するåŋ…čĻãŒã‚るためです。 さぞざぞãĒäŊŽãƒŦベãƒĢãŽã‚˛ãƒŧムãĢついãĻå ąå‘Šã•ã‚Œã‚‹ãƒŦポãƒŧãƒˆã‚’čžã„ãŸå ´åˆã€åŗ時ぎã‚ĸã‚¯ã‚ˇãƒ§ãƒŗぎã‚ŦイドとしãĻ受け取らãĒいでください。 こぎãƒŦポãƒŧトは、非常ãĢã‚ŋイトãĢãĒãŖた場合ãĢいつかåŋ…čĻãĢãĒる可čƒŊ性ぎあるハッキãƒŗグぎã‚ŗãƒŧパ゚を構į¯‰ã™ã‚‹ãŽãĢåŊšįĢ‹ãĄãžã™ã€‚

例


JDK 9で最čŋ‘čĻ‹ã¤ã‹ãŖた非常ãĢį°Ąå˜ãĒ䞋がありぞす。



JavaãĢはArrayList型があり、内部クナ゚Itrをäģ‹ã—ãĻ原čŖ…される反垊子がありぞす。 こぎItrクナ゚はプナイベãƒŧトãĒぎで、Itrã‚ŗãƒŗ゚トナクã‚ŋãƒŧをå‘ŧãŗå‡ēすことができるようãĢ、合成ぎいわゆるbridgeãƒĄã‚Ŋッドīŧˆãƒ‘ブãƒĒックīŧ‰ãŒã‚りぞす。 å•éĄŒã¯ã€Itrをå‘ŧãŗå‡ēã™ã¨ã€ã“ãŽãƒĄã‚Ŋãƒƒãƒ‰ãŽã‚ˇã‚°ãƒãƒãƒŖãĢぞだロãƒŧドされãĻいãĒã„ã‚¯ãƒŠã‚šãŒčĄ¨į¤ēされるため、ホット゚ポットイãƒŗãƒŦイヤãƒŧがį ´æã™ã‚‹ã“とです。

こぎエナãƒŧはおこãĢありぞすかīŧˆæœ€éŠåŒ–中īŧ‰īŧŸ これはArrayListã‚ŗãƒŧドぎエナãƒŧですかīŧŸ むしろ、いいえ。 これはjavacã‚ŗãƒŧドぎバグですかīŧŸ はい、そうです。 ホット゚ポットã‚ŗãƒŧドでぎ最遊化が不十分ですかīŧŸ むしろ、はい。 しかし、ã‚ŗãƒŗパイナãƒŧが気ãĨき、ã‚ŗãƒŗパイナãƒŧでこれをäŋŽæ­Ŗする斚æŗ•ã‚’į†č§Ŗするぞで、ArrayListãĢį›´æŽĨå…Ĩれる斚がį°Ąå˜ã§ã™ã€‚



したがãŖãĻ、åŧ•æ•°ãŽãĒいこぎようãĒã‚ŗãƒŗ゚トナクã‚ŋãƒŧがそこãĢäŊœæˆã•ã‚Œã€ãƒã‚°ã¸ãŽãƒĒãƒŗクがそこãĢ書きčžŧぞれ、こぎã‚ŗãƒŗ゚トナクã‚ŋãƒŧがäŊœæˆã•ã‚Œã‚‹į†į”ąãĒおがį¤ēされぞす。

訂æ­Ŗ


ãƒŦッドゞãƒŧãƒŗã‚’é•ˇæ™‚é–“æŽ˜ã‚Šä¸‹ã’ã‚‹ã¨ã€é€šå¸¸ã€äēē々があãĒたぎところãĢæĨãĻ「すぐãĢéŖ›ãŗčžŧもうとすると、すずãĻがč‡Ēåˆ†ã‚’å‚ˇã¤ã‘ãžã™ã€ã¨č¨€ã„ãžã™ã€‚ ãƒĄãƒŗã‚ŋãƒĢトナップは非常ãĢ単į´”です。åŊŧらは、ハックをすぐãĢ回せばį´ æ™´ã‚‰ã—いと思いぞす。



įˇ´įŋ’では、ãƒŦッドゞãƒŧãƒŗã§ã¯ã€Œå‚ˇã€ãŒį™ēį”Ÿã—ãĒいことがį¤ēされãĻいぞす。
䞋としãĻīŧˆį§ã¯åŊŧを常ãĢčĻ‹ãĻいぞすīŧ‰īŧš


JDKでパフりãƒŧマãƒŗã‚šãŽå•éĄŒãŒčĻ‹ã¤ã‹ã‚Šãžã—た。 JDKでäŋŽæ­ŖするäģŖわりãĢ、æŦĄãŽã‚ˆã†ãĢč¨€ã„ãžã—ãŸã€‚ Unsafeをäģ‹ã—ãĻハッキãƒŗグしぞす。」 そしãĻ、UnsafeがãĒくãĒãŖãĻおり、setAccessibleīŧˆīŧ‰ã§ã•ãˆæŠŸčƒŊしãĻいãĒいことがわかりぞした。 したがãŖãĻ、だぞされãĻはいけぞせん。 ãƒŦッドゞãƒŧãƒŗでäŊœæĨ­ã™ã‚‹å ´åˆã€æŠ€čĄ“įš„負å‚ĩã‚’č˛ æ‹…ã—ãžã™ã€‚


ハックがäŊ•ãŽãŸã‚ãĢčĄŒã‚ã‚ŒãŸãŽã‹ã€ãŠãŽã‚ˆã†ãĒæĄäģļ下でそれが遊į”¨ã•ã‚Œã‚‹ãŽã‹ã€ãã‚ŒãŒã‚‚はやåŋ…čĻã§ãĒいことをįĸēčĒã™ã‚‹æ–šæŗ•ã€ã‚ãĒたが垅ãŖãĻいるã‚ĸップ゚トãƒĒãƒŧムぎバグãĒおを常ãĢ文書化しぞす。

į§ã¯å­Ļæ Ąã§ãŽå­Ļæ Ąį”Ÿæ´ģぎ授æĨ­ã§æ­ĸčĄ€å¸¯ã‚’äŊœã‚‹ã‚ˆã†ãĢ教えられぞした。 į§ã¯äģŠã§ã‚‚ã€čĄ€ãŽéž­ãŽč‰˛ãĢåŋœã˜ãĻ、こぎæ­ĸčĄ€å¸¯ã‚’å‚ˇãŽä¸ŠãžãŸã¯ä¸‹ãĢ遊į”¨ã™ã‚‹ã¨ã„うこぎ指į¤ēを思いå‡ēしぞす。 しかし、į§ã¯å‘Ŋäģ¤ãŽåˆĨぎæŽĩčŊぎためãĢ思いå‡ēしぞすīŧšã‚ãĒたぎ同åŋ—ぎčēĢäŊ“ãĢæ­ĸčĄ€å¸¯ã‚’įŊŽã„た垌、あãĒたはそこãĢã‚ŋイム゚ã‚ŋãƒŗプäģ˜ããŽãƒĄãƒĸをįŊŽããšãã§ã™ã€‚

ã‚ŗãƒŧドãĢこぎようãĒハックをäŊœæˆã™ã‚‹ãŸãŗãĢ、į‰šåŽšãŽã‚šãƒˆãƒŧãƒĒãƒŧが頭ぎ中ãĢありぞす。ã‚ŗãƒŧãƒ‰ãŽã˛ãŠã„įŽ‡æ‰€ãĢæ­ĸčĄ€å¸¯ã‚’įŊŽãã€ãã“ãĢäŊ•ã‚‰ã‹ãŽį†į”ąã§ãã‚ŒãŒčĄŒã‚ã‚ŒãŸã“とを書くåŋ…čĻãŒã‚りぞす。バグ、およãŗこぎハãƒŧネ゚は、そぎようãĒæĄäģļがæē€ãŸã•ã‚ŒãŸå ´åˆãĢぎãŋ削除できぞす。 これãĢより、į§ãžãŸã¯äģ–ぎ同僚がこぎã‚ŗãƒŧドをį™ēčĻ‹ã—たときãĢ、すぐãĢåˆ‡ã‚Šå–ã‚‹äžĄå€¤ãŒã‚ã‚‹ã‹ãŠã†ã‹ã‚’į†č§Ŗする抟äŧšãŒåž—られぞす。ぞたは、æ­ĸčĄ€å¸¯ã‚’å‰Šé™¤ã™ã‚‹ã¨ã€ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆãŽæŽ‹ã‚ŠãŽéƒ¨åˆ†īŧˆãžãŸã¯äģ˛é–“īŧ‰ãŒæŽēされぞす。

ãƒŦッドゞãƒŧãƒŗãŽå°č¨ˆ


ハッキãƒŗグをįĻæ­ĸしぞせん。 これãĢついãĻč­Ļ告するぎは愚かãĒことです。とãĢã‹ããã‚Œã‚‰ã‚’čĄŒã†ã§ã—ã‚‡ã†ã€‚ ただし、プロジェクトでハッキãƒŗグぎ数と密åēĻをįļ­æŒã™ã‚‹ã“とは、そぎ存įļšãĢåŋ…čĻãĒæĄäģļです。

ã‚ĸップ゚トãƒĒãƒŧムとé€Ŗæēする抟čƒŊīŧˆãŸã¨ãˆã°ã€ä¸Šč¨˜ãŽãƒĒポジトãƒĒãĢ変更をã‚ŗミットしãĻã‚Ēãƒŧプãƒŗã‚Ŋãƒŧã‚šãĢ取りįĩ„んでいる場合īŧ‰ã¯ã€é•ˇæœŸįš„ãĒ運å‘Ŋを大いãĢäŋƒé€˛ã—ぞす。 パッチを遊į”¨ã—た内部čŖŊ品がã‚ĸップ゚トãƒĒãƒŧãƒ ã‹ã‚‰åˆ†å˛ã™ã‚‹ãģお、それをã‚ĩポãƒŧトするぎãĢč˛ģį”¨ãŒã‹ã‹ã‚Šãžã™ã€‚

これらぎすずãĻãŽåą¤ã‚’į†č§ŖするčƒŊ力は、「įŒĢで」æ­Ŗ常ãĢ訓įˇ´ã•ã‚Œãžã™ã€‚おそらく、あらゆるį¨ŽéĄžãŽé‡čĻãĒå¤‰æ›´ã‚’åŽŸčĄŒã§ãã‚‹ã‚šãƒ†ãƒŧジãƒŗグį’°åĸƒãŒåŋ…čĻã§ã™ã€‚

åˆĨã‚ŒãŽč¨€č‘‰


しかし、ここでį§ãŸãĄã¯į­‹é‡‘å…Ĩりぎäŧšč­°ã§ã™ã€‚ こぎすずãĻぎ富でäŊ•ã‚’しようかīŧŸ
į­‹é‡‘å…Ĩりぎäŧšč­°ãĢ参加しãĻいãĻ、čŖŊ品ぎãƒĻãƒŧã‚ļãƒŧである場合、į”Ÿį”Ŗ性ãĢæēわるäēēとしãĻぎį§ãŽčĻŗį‚šã‹ã‚‰ã¯ã€æŦĄãŽã“ã¨ã‚’čĄŒã†åŋ…čĻãŒã‚りぞす。


čŖŊ品開į™ēč€…ãŽå ´åˆīŧš



ä¸ģãĒパフりãƒŧマãƒŗã‚šäŊœæĨ­ã¯ã‚°ãƒĒãƒŧãƒŗã‚žãƒŧãƒŗã§čĄŒã‚ã‚Œã‚‹ã“ã¨ãĢæŗ¨æ„ã—ãĻください。 プロジェクトぎį”Ÿį”Ŗ性をéĢ˜ã‚ã‚‹ãŸãŗãĢ、ぞずį°Ąå˜ãĒことをčĻ‹ãĻください。 排気性čƒŊが向上しぞす。 ãã‚Œã¯é€€åąˆãĒぎで、čĒ°ã‚‚äŧšč­°ã§ãã‚Œã‚‰ãĢついãĻčŠąã™ã“ã¨ã¯ã‚ã‚Šãžã›ã‚“ã€‚ åŊŧらは通常、éģ„č‰˛ãžãŸã¯čĩ¤č‰˛ãŽã‚žãƒŧãƒŗãĢついãĻあãĒたãĢčŠąã—ãžã™ã€‚ čĒ°ã‹ãŒLinkedListをArrayListãĢ英雄įš„ãĢäē¤æ›ã—た斚æŗ•ãĢついãĻ、通常はčĒ°ã‚‚čŠąã•ãĒいでしょう。



Joker 2017では、Aleksey Shipilevが「Shenandoahīŧšå¯čƒŊ性ぎあるã‚Ŧベãƒŧジã‚ŗãƒŦクã‚ŋãƒŧīŧˆãƒ‘ãƒŧト2īŧ‰ã€ã¨ã„う新しいãƒŦポãƒŧトを提䞛し、ShenandoahぎようãĒäŊŽé€ŸGCがį›´éĸしãĒければãĒらãĒã„å•éĄŒã¨ã€JVMãƒŦベãƒĢでäŊ•ãŒã§ãã‚‹ã‹ãĢついãĻčŠąã—ãžã™ã€‚ äŧšč­°ã¯ã‚ĩãƒŗクトペテãƒĢブãƒĢクで11月3æ—Ĩと4æ—ĨãĢ開å‚Ŧされぞす。 プログナムとäģ–ぎãƒŦポãƒŧトぎį™ēčĄ¨ã¯ã‚¤ãƒ™ãƒŗトぎå…Ŧåŧã‚Ļェブã‚ĩイトãĢありぞす 。

Source: https://habr.com/ru/post/J338732/


All Articles