рдЬреЗрд╡реАрдПрдо рд╡рд┐рдХрд▓реНрдкред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╣рд░ рджрд┐рди, рдЬрд╛рд╡рд╛ рд╢рдмреНрдж рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЦреНрдпрд╛рдд invokeDynamic рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдЬ рдореИрдВ рдПрдХ рдЖрднрд╛рд╕реА рдЬрд╛рд╡рд╛ рдорд╢реАрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЕрд░реНрдерд╛рддреН, рдУрд░реЗрдХрд▓ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдЬреЗрд╡реАрдПрдо рд╕рдВрд╕реНрдХрд░рдг 1.6 рдФрд░ рдЙрдЪреНрдЪрддрд░ (рд╕рд░реНрд╡рд░) рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдорд┐рд▓рдирд╛ рд▓рдЧрднрдЧ рдирд╛рдореБрдордХрд┐рди рд╣реИ рдЬреЛ -Xmx, -Xms рдФрд░ -Xss рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВред рдПрдХ рд╕рдордп, рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА, рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдУрд░реЗрдХрд▓ рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдерд╛ред рдФрд░ рдлрд┐рд░ Google, рдкреНрд░рдпреЛрдЧ рдФрд░ рд╕рдВрдЪрд╛рд░:

-XX: + DoEcapeAnalysis


рдореИрдВ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛, рд╢рд╛рдпрдж, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде - DoEscapeAnalysisред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЖрджрд┐рдо рдФрд░ рд╡рд╕реНрддреБ рд╕рдВрджрд░реНрдн рдвреЗрд░ рдкрд░ рдирд╣реАрдВ рдмрдиреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреИрдХ (рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 256KB) рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рд╕реАрдзреЗ рд╕реНрдЯреИрдХ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ JVM 1.6 рдЕрдкрдиреЗ рдЖрдк рдХреЛ 14 рд╡реЗрдВ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЦреБрдж рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдкреАрдбреАрдПрдл) ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рддрдм:



рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрдерд╛рдХрдерд┐рдд рдХрдиреЗрдХреНрд╢рди рдЧреНрд░рд╛рдл рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЪрд░рдг рдореЗрдВ (рдХрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо), рдЕрдиреНрдп рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪреМрд░рд╛рд╣реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЧреНрд░рд╛рдл рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрднрд╡ рд╣реИ:



рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд░рдг рдХреЗ рдмрд╛рдж, рдЬреЗрд╡реАрдПрдо рдЦреБрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдВрднрд╡ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИ: рдпрджрд┐ рдиреЛрдПрд╕реНрдХреЗрдк рдПрдбрд╛рдкреНрдЯрд░, рддреЛ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ NoEscape рдпрд╛ ArgEscape рд╣реИ, рддреЛ рдЙрд╕ рдкрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдкрд░реЗрд╢рди рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╕реНрддреБ рд╣реА рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░ рдвреЗрд░ рдкрд░ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЬреЗрд╡реАрдПрдо рдкреВрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕рдордЧреНрд░рддрд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж рд╡рд╛рд▓рд░рд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрд╛рдЧреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдлреА рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ:

for (int i = 0; i < 1000*1000*1000; i++) { Foo foo = new Foo(); } 

рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ 8-15 рдЧреБрдирд╛ рдмрдврд╝ рд╕рдХрддреА рд╣реИред рдпрджреНрдпрдкрд┐, рдЕрднреНрдпрд╛рд╕ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдкрд░ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ ( рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ ) рдПрд╕реНрдХреЗрдкрдПрд▓реАрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдЯреИрдХ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг рд╣реИред

рд╡реИрд╕реЗ, StringBuilder рдФрд░ StringBuffer рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдПрд╕реНрдХреЗрдкрдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЖрдкрдиреЗ рдЕрдЪрд╛рдирдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧрд░рдмрдлрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╕реНрдЯрд░реНрд▓рд┐рдВрдЧрдмрдлрд╝рд░ рдХреЗ рд▓рд┐рдП рдПрд╕реНрдХреЗрдкрдЕрдирд╛рд▓рд┐рд╕рд┐рд╕ (рдпрджрд┐ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рддрд╛рд▓реЗ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрдлрд╝рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрдлрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

-XX: + рдПрдЧреНрд░реЗрд╕рд┐рд╡ рдСрдлреАрд╕рд░реНрд╕


рдЕрдЧреНрд░реЗрд╕рд┐рд╡ рдСрдкреНрд╢рдВрд╕ рдПрдХ рд╕реБрдкрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ - рдЬреЗрдбреАрдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ рдЬрдЧрд╣ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдЧреНрд░реЗрд╕рд┐рд╡рдУрд╡рд░ рдЬреЗрд╡реАрдПрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред , рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ)ред рд╣рдо рджреЛ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЭрдВрдбреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ:

 java -server -XX:-AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal > no_aggr java -server -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal > aggr 

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛:
-AggressiveOpts
+ рдЖрдХреНрд░рд╛рдордХ рднрд╛рд╖рд╛рдПрдВ
AutoBoxCacheMax
128
20000
BiasedLockingStartupDelay
4000
500
EliminateAutoBox
рдЭреВрдард╛
рд╕рдЪ
OptimizeFill
рдЭреВрдард╛
рд╕рдЪ
OptimizeStringConcat
рдЭреВрдард╛
рд╕рдЪ

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ 5 рдбреЗрдЯрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП 1.6 рдЕрджреНрдпрддрди 35 рдФрд░ 1.7 рдЕрджреНрдпрддрди 7, рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдЖрдХреНрд░рд╛рдордХ рдЕрдиреБрдХреВрд▓рди рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд╡рд╛ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

-XX: AutoBoxCacheMax = рдЖрдХрд╛рд░


рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢реНрдб рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдВ (рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл) рдХрд┐рдпрд╛ рд╣реИ ред

-XX: рдмрд╛рдпрд╕реНрдб рд▓реЙрдХрд┐рдВрдЧрд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдбреЗрд▓реЗ = рджреЗрд░реА


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдмреНрд▓реЙрдХ рдХреЛ 3 рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд╛рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдЖрдк рдпрд╣рд╛рдБ , рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ (рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝) рдХреЛ рдПрдХ рдзрд╛рдЧреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХрддрдо 1 рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрд╕ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдкрдХреНрд╖рдкрд╛рддреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдкрд░реЗрд╢рди рдореВрд▓реНрдп рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдереНрд░реЗрдб рдкрдХреНрд╖рдкрд╛рддреА рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓реЙрдХ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрддрд▓реЗ рд▓реЙрдХ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред

рд╕реНрд╡рдпрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╣рдВрдЧрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреЗрд╡реАрдПрдо рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реЛрддреА рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рддрд╛рд▓реЛрдВ рдХреЛ рдкрддрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рдзрд╛рдЧреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреЗрд░реА рдХреЗ рдмрд╛рдж рдРрд╕реЗ рддрд╛рд▓реЗ рдкрдХреНрд╖рдкрд╛рддрдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЬреЗрд╡реАрдПрдо рд╢реБрд░реВ рдореЗрдВ рд▓реЙрдХ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЙрдирдХреЗ рдмреАрдЪ рдХрдо рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, BiasedLockingStartupDelay рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЗ рдореБрдЦреНрдп рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрд╕реА рд╕реНрдЯреНрд░реАрдо рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

-XX: + OptimizeStringConcat


рд╕рд╛рде рд╣реА рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рднреАред рд╕рдорд╛рдирддрд╛ рдореЗрдВ рдПрдХ рдкреИрдЯрд░реНрди рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ

 StringBuilder().append(...).toString() //   StringBuilder().append(new StringBuiler().append(...).toString()).toString() 

рдФрд░ рдПрдХ рдирдП рд╕рдВрдпреЛрдЬрди рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЗрд╡рд▓ 1 рдмрд╛рд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрдЯреЗрдХреНрдиреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрд▓ рд╡рд░реНрдгреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рд╣рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ 20 рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреЗрдВрдб () рдСрдкрд░реЗрд╢рди рдХреЛ 20 рдмрд╛рд░ рд▓рдВрдмрд╛ рдХрд╣рддреЗ рд╣реИрдВред рдЪрд╛рд░ рд╡рд░реНрдгреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдПрдХ рдмрд╛рд░ рдФрд░ 400 рд╡рд░реНрдгреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рд╣реЛрдЧреАред

XX: + OptimizeFill


рдХрд╛рд░реНрдп рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд░реЗ рдлрд┐рд▓рд┐рдВрдЧ / рдХреЙрдкреА рд╕рд╛рдЗрдХрд▓ рдХреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдмреНрд▓реЙрдХ (Arrays.fill () рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛):

  for (int i=fromIndex; i<toIndex; i++) a[i] = val; 

рдХреЗрд╡рд▓ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЗрдорд╕реЗрдЯ рдХреА рд╕рдорд╛рдирддрд╛ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реЛрдВрдЧреЗред

XX: + EliminateAutoBox


рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдзреНрд╡рдЬ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдСрдЯреЛрдмреЙрдХреНрд╕рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ рдХрд┐ рдпрд╣ рдзреНрд╡рдЬ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереА рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЗрдВрдЯреАрдЬрд░ рдЧреЛрд▓реЗ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред

-XX: + UseCompressedStrings


рдПрдХ рд╕реБрдВрджрд░ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╡рд┐рдХрд▓реНрдк, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ ... рдпрджрд┐ 90 рдХреЗ рджрд╢рдХ рдореЗрдВ, рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкреНрд░рддрд┐ рдЪрд░рд┐рддреНрд░ 2 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛, рддреЛ рдЖрдЬ рдРрд╕рд╛ рдЕрдиреБрдХреВрд▓рди рдмрд╣реБрдд рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдг рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдЗрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ (ASCII)ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

 char[] -> byte[] 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдореГрддрд┐ рдмрдЪрдд рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХрд╛рд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдЬреЗрд╡реАрдПрдо рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдХреНрд╖рд░рдг рд╕рдВрднрд╡ рд╣реИред рджрд░рдЕрд╕рд▓ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИред

-XX: + UseStringCache


рдХрд╛рдлреА рд░рд╣рд╕реНрдпрдордп рд╡рд┐рдХрд▓реНрдк, рдирд╛рдо рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреИрд╕реЗ? рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рд╣рд╛рдБ, рдФрд░ рдХреЛрдб рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

-XX: + UseCompressedOops


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рддрдереНрдп:



рдпрд╣ рд╡рд┐рдХрд▓реНрдк 64-рдмрд┐рдЯ JVMs рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ 32 рдмрд┐рдЯреНрд╕ рддрдХ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдвреЗрд░ рдХрд╛ рдЖрдХрд╛рд░ 4 рдЬреАрдмреА рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЫреЛрдЯреЗ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, 8 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЧреБрдгрдХ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ 32 рдмрд┐рдЯреНрд╕ рдХреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде 2 ^ 35 рдмрд╛рдЗрдЯреНрд╕ (32 рдЬреАрдмреА) рд╕рд╛рдЗрдЬ рдХреЗ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЕрдВрджрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рдЗрдЯреНрд╕ рдирд╣реАрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдзрд╛рд░рдгрд╛рдУрдВ (рдмрд╣реБрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдХреЗ рдХрд╛рд░рдг, рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╢рд┐рдлреНрдЯ рдФрд░ рд╕рдо рдСрдкрд░реЗрд╢рди рд╣реИред

рд╕реНрд╡рдпрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╣реЗрдбрд░ рдХреЛ рднреА рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдирд╛рдИ рдЧрдИ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд░реЗрдЦрдг рдФрд░ рд╢рд┐рдлреНрдЯреНрд╕ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд╕рдд рдореЗрдореЛрд░реА рдЦрдкрдд рдХреЛ 20-60% рддрдХ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрд░реНрдерд╛рддреН, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдиреБрдХрд╕рд╛рди рд╣реА рд╣реИрдВ:



рдЪреВрдВрдХрд┐ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлрд╛рдпрджреЗ рд╣реИрдВ, JDK 6 рдЕрдкрдбреЗрдЯ 23 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде JDK 7 рдореЗрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ ред

-XX: + рд╣рдЯрд╛ рджреЗрдВ


рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдХрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрд╛рд▓реЗ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХ:

 synchronized (object) { //doSomething1 } synchronized (object) { //doSomething2 } 

 synchronized (object) { //doSomething3 } //doSomething4 synchronized (object) { //doSomething5 } 

рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

 synchronized (object) { //doSomething1 //doSomething2 } 


 synchronized (object) { //doSomething3 //doSomething4 //doSomething5 } 


рдпрд╣ рдореЙрдирд┐рдЯрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдУрд╡рд░рдмреЛрд░реНрдб рдореЗрдВ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рдмрдЪреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА ~ 700 рдЭрдВрдбреЛрдВ рдХреЛ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдбрд╛рд▓рдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдирд╣реАрдВ рдЫреВрддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдФрд░ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рд╣реИ рдФрд░ рдпрд╣ рдХрдИ рдкрджреЛрдВ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред

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


All Articles