рдорд╣рд┐рд▓рд╛рдУрдВ рдФрд░ рд╕рдЬреНрдЬрдиреЛрдВ, рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рддрд░реАрдХрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШреБрдЯрдиреЗ рдкрд░ рдПрдХ рдЕрдВрдЧ рд▓рд┐рдпрд╛, рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рд╕рдВрдЧрд╛рдорд┐рддрд┐-рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХреА рд╣реЛред рд▓реЗрдХрд┐рди рдереНрд░реЗрдбрд▓реЛрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рдореБрдЭреЗ рдиреАрдЪреЗ, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдореЗрдореЛрд░реА рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдирд┐рдЧрд▓рдиреЗ рджреЗрддреА рд╣реИред
рдмреЗрд╢рдХ, рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХреА рдореЗрдореЛрд░реА рдХреЛ рдХрдЪрд░реЗ рдХреЗ рднрдВрдбрд╛рд░рдг рд╕реЗ рдмреЗрд╣рддрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рдЧрд▓рддреА рдордд рджреЛрд╣рд░рд╛рдУред рдЕрд░реНрдерд╛рддреН: рдЖрдкрдХреЛ рдереНрд░реЗрдбрд▓реЙрдХ рдореЗрдВ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХреЛ рдЗрд╕ рдереНрд░реЗрдбрд▓реЛрдХ рдореЗрдВ рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреБрдЫ рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрдВрддрддрдГ рдЗрд╕ рдереНрд░реЗрдбрд▓реЛрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдХреЛрдб рджреЗ рджреВрдВрдЧрд╛:
class X { ThreadLocal<Anchor> local = new ThreadLocal<Anchor>(); class Anchor { byte[] data = new byte[1024 * 1024]; } public Anchor getOrCreate() { Anchor res = local.get(); if (res == null) { res = new Anchor(); local.set(res); } return res; } public static void doLeakOneMoreInstance() { new X().getOrCreate(); } public static void main(String[] args) throws Exception { while (true) { doLeakOneMoreInstance(); System.out.println(Runtime.getRuntime().freeMemory() / 1024 / 1024 + " MB of heap left"); } } }
рд╣рд░ рдмрд╛рд░ doLeakOneMoreInstance рдХреЛ X рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ ThreadLocal рдорд╛рди рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ X рдХрд╛ рд╕рдВрджрд░реНрдн рдмрд┐рд▓реНрдХреБрд▓ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдереНрд░реЗрдбрд▓реЛрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд▓рд┐рдВрдХ рдХрднреА рднреА X рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреВрд░реЗ рдмрдирд╛рдП рдЧрдП рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмрд╛рд╣рд░реА рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреАрд╕реА рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдпрд╣ рдерд╛ред рдпрд╣ рдХреЛрдб рдХреБрдЫ рдорд╛рдореВрд▓реА рд╣реАрдк рдЖрдХрд╛рд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ JVM рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛, рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢ "java.lang.OutOfMemoryError: Java рд╣реАрдк рд╕реНрдкреЗрд╕" рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХрд╛ рдореБрдХреБрдЯ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдпрд╣ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рд╣реИ) рд╕рд┐рд░реНрдл рдХреБрдЫ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд)ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЖрдЧреЗ рдкрдврд╝реЗрдВ, рд╕реНрд╡-рдкрд░реАрдХреНрд╖рдг рдХреЗ
рд░реВрдк рдореЗрдВ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдЙрдкрд░реЛрдХреНрдд рдЦрдВрдб рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдХрд░ OOM рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдпрд╛ рдЬрд╛рдП?рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдереНрд░реЗрдбрд▓реЛрдХ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд╣реИ), рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд▓рд╛рдЦреЛрдВ рдПрдХреНрд╕ рдФрд░ рдЬрд┐рдВрджрд╛ рдореГрдд рдФрд░ рдореГрдд рд╣реИрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред рд╕рд░рд▓ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реЛ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЗ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рд╕рдордп рдерд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?
(рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдУрд░реЗрдХрд▓ рдХреЗ рдЬреЗрд╡реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред)
рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдереНрд░реЗрдбрд▓реЛрдХ рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рддрд▓рдирд╛ рд╣реЛрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдереНрд░реЗрдбрд▓реЛрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдбреЗрдЯрд╛ рдЙрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдереНрд░реЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ "рдХрдордЬреЛрд░" рдХреБрдВрдЬрд┐рдпреЛрдВ (WeakHashMap рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ) рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд╣рд╛рдВ рдереНрд░реЗрдбрд▓реЛрдХрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдереНрд░реЗрдбрд▓реЛрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЦреБрдж рдХреЛ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд░ рдереНрд░реЗрдбрд▓реЛрдХрд▓ рдХрд╛ рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреБрдВрдЬреА рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд▓рд┐рдВрдХ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдирдП рддрддреНрд╡реЛрдВ рдХреЛ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд╕рд╛рдл рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ рджреВрд░рд╕реНрде рдЬреАрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рддрдВрддреНрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ: рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ,
рд▓реЗрдХрд┐рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ ! рдЕрдЧрд░, рдХрд┐рд╕реА рддрд░рд╣, рдереНрд░реЗрдбрд▓реЛрдХрд▓ рд╡реИрд▓реНрдпреВ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЯрд╛рдЗрдк рдПрдВрдХрд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ) рдХреЗ рднреАрддрд░ рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдереНрд░реЗрдбрд▓реЛрдХ рдпреБрдХреНрдд рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪреВрдВрдХрд┐ рдПрдВрдХрд░ рдПрдХ рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧ рд╣реИ, рдЯрд╛рдЗрдк рдПрдХреНрд╕ рдХреА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрджрд░реНрдн рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдереНрд░реЗрдбрд▓реЛрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред ), рдлрд┐рд░ рдЬреАрд╕реА рдереНрд░реЗрдбрд▓реЛрдХ рдХреЛ рдареАрдХ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рд╕рджрд┐рдпреЛрдВ рдХреЗ рдЕрдВрдд рддрдХ, рдпрд╛ рдЬрдм рддрдХ рдорд╛рд▓рд┐рдХ рдзрд╛рдЧрд╛ рдЬреАрд╡рд┐рдд рд╣реИ, рддрдм рддрдХ рдореГрдд рд╡рдЬрди рд▓рдЯрдХрд╛ рд░рд╣рддрд╛ рд╣реИред
рдЦреИрд░, рдЖрддреНрдо-рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдЕрдм рдмрд╣реБрдд рд╣реА рддреБрдЪреНрдЫ рд╣реИ:
рддрд╛рдХрд┐ рдХреЛрдИ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рди рд╣реЛ, рдпрд╣ рдПрдВрдХрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕реНрдЯреЗрдЯрд┐рдХ рдХреАрд╡рд░реНрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд▓рд┐рдВрдХ рдХреЗ рджреБрд╖реНрдЪрдХреНрд░ рдЦреБрд▓рддреЗ рд╣реИрдВредрдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдереНрд░реЗрдбрд▓реЛрдХрд▓ рдХреА рд╡рд░реНрдгрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдФрд░ рдкрд░реЗрд╢рд╛рдиреА рдмрдврд╝рддреА рд╣реИ: рдЬрдм рддрдХ рдХрд┐ рдереНрд░реЗрдб рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдЬреАрд╡рд┐рдд рд░рд╣рддрд╛ рд╣реИ, рдХреЛрдИ рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдереНрд░реЗрдбрд▓реЛрдХ рдорд╛рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдереНрд░реЗрдбрд▓реЛрдХ рдХрд╛ рд▓рд┐рдВрдХ рдЦреЛ рдЧрдпрд╛ рд╣реЛ: рдмрд┐рдВрджреБ рд╣реИ рдЬрдм рдереНрд░реЗрдбрд▓реЛрдХ рдЗрд╕ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдорд╛рдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдереНрд░реЗрдб рдиреЗрдЯрд╡рд░реНрдХ I / O рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕реЛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓рдВрдмреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдкреБрд░рд╛рдиреЗ рдорд╛рдиреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред
ThreadLocal, рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ! рдЙрди рдореЗрдВ рдереНрд░реЗрдбрд▓реЛрдХ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рди рдбрд╛рд▓реЗрдВ, рдЙрдирдореЗрдВ рдбреЗрдЯрд╛ рдкреЗрдЯрд╛рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рди рдХрд░реЗрдВред рдереНрд░реЗрдбрд▓реЛрдХ рдХреЗ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрднреА-рдХрднреА рдорд╛рдирдЪрд┐рддреНрд░ <рдереНрд░реЗрдб, рдорд╛рди> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
PS рд╣рд╛рдБ, рдФрд░ рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд▓реЗрдЦ рдХреЛ "рдореЗрдореЛрд░реА рд▓реАрдХ рд╡рд┐рде рдереНрд░реЗрдбрд▓реЛрдХрд▓" рдХрд╣рд╛ рд╣реИ, рди рдХрд┐ "рдореЗрдореЛрд░реА рд▓реАрдХ рдЗрди рдереНрд░реЗрдбрд▓реЛрдХ": рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдареАрдХ рд╣реИ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред