パフりãƒŧãƒžãƒŗã‚šīŧšį§ãŽåå‰ã¯äŊ•ですかīŧŸ -大čĻæ¨Ąãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã§ãŽæœ€éŠåŒ–ãĢé–ĸする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