рд▓реЗрдХрд┐рди рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рднрд╛рдЧ I: рд╕рд┐рдВрдХ

рдЪрд┐рддреНрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдкреЛрд╕реНрдЯ "рдореИрдВрдиреЗ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдХреНрд▓реЛрди рдХрд┐рдпрд╛, рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рджреЗрдЦреЗрдВ")
рд╣рд░ рдХреЛрдИ рдЬреЛ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рдорд╕реНрдпрд╛рдУрдВ (рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЗрдЗрдЬрд╝реИрдЧреИрдм) рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореБрджреНрд░рд╛рд╕реНрдлреАрддрд┐, рд╡рд┐рд╡рд╛рдж, рдореЗрдореНрдмрд░, рдкрдХреНрд╖рдкрд╛рддреА рд▓реЙрдХрд┐рдВрдЧ, рдереНрд░реЗрдб рдкрд╛рд░реНрдХрд┐рдВрдЧ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рддрд░рд╣ рд╢рд░реНрддреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рд░ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рд╕рднреА рдирд╣реАрдВ ред

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

рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд░реНрдгрди рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рд╡рд╛ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЗ рдЕрдЪреНрдЫреЗ рдЬрд╛рдирдХрд╛рд░ рд╣реИрдВред рдЖрдк рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрдЧреЗрдИ рд╡рд╛рд▓рд░рд╕ рдХреБрдХреНрд╕реЗрдВрдХреЛ рдХреА рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдкрд░ рдпрд╛ рдореЗрд░реЗ рд╢реБрд░реБрдЖрддреА рд╡рд┐рд╖рдп рдкрд░ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрд▓рд╛рдЗрдб # 38 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдпрд╣ рдкреНрд░рд╕реНрддреБрддрд┐ рдорд╣рд╛рди рд╕рд╛рдордЧреНрд░реА рд╣реИред

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдиреНрдпреВрдирддрдо

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЕрдкрдирд╛ рдореЙрдирд┐рдЯрд░ рд╣реЛрддрд╛ рд╣реИ , рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рдорд╛рди C ++ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореНрдпреВрдЯреЗрдХреНрд╕-рдПрд╕ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдмрд╣рд┐рд╖реНрдХрд░рдг рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рди рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

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


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



рдЗрд╕ рдЕрдореВрд░реНрдд рддрд░реНрдХ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрдВ рдбреВрдмреЗ рд╣реБрдП рд╣реИрдВред

рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЕрдВрджрд░, рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рджреЛ рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж рдФрд░ рдПрдХ рд╕реВрдЪрдХред рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд╣рд╛рдВ рдХреБрдЫ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИред рдпреЗ рд╣реЗрдбрд░ рддрдерд╛рдХрдерд┐рдд oop (рдСрд░реНрдбрд┐рдирд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЙрдЗрдВрдЯрд░) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдлрд╝рд╛рдЗрд▓ hotspot/src/share/vm/oops/oop.hpp рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдирд┐рд╢рд╛рди рд╢рдмреНрдж рдХреНрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд markOop.hpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред ( oopDesc рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдкрд░ рдзреНрдпрд╛рди рди oopDesc : рдпрд╣ рдХреЗрд╡рд▓ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ) рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рдЗрд╕реЗ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЬреЛ рд▓реЛрдЧ рдмрд╣реБрдд рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдирд┐рд╢рд╛рди рдореЗрдВ рд╣реИ рд╢рдмреНрдж рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реИред рдЖрдк рдЗрд╕ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ 90 рд╡реАрдВ рд╕реНрд▓рд╛рдЗрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд╢рдмреНрджреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ рд╕рд╛рдордЧреНрд░реА

рд░рд╛рдЬреНрдпрдЯреИрдЧрдЕрдВрддрд░реНрд╡рд╕реНрддреБ
рдЦреБрд▓рд╛, рдкрддрд▓рд╛, рдирд┐рд╖реНрдкрдХреНрд╖01
 Identity hashcode 
 age 
 0 
рдмрдВрдж, рдкрддрд▓рд╛, рдирд┐рд╖реНрдкрдХреНрд╖00
     mark word 
рдлреБрд▓рд╛рдпрд╛10
     
рдЭреБрдХрд╛ рд╣реБрдЖ01
 id - 
 epoch 
 age 
 1 
рдЬреАрд╕реА рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд11

рдпрд╣рд╛рдБ рд╣рдо рдХрдИ рдирдП рдЕрд░реНрде рджреЗрдЦрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рдЪрд╛рди рд╣реИрд╢ рдХреЛрдб рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╣реИрд╢ рдХреЛрдб рд╣реИ рдЬреЛ System.identityHashCode рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдпреБ рдХрд┐рддрдиреЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдмрдЪреА рд╣реИред рдФрд░ рдПрдХ рдпреБрдЧ рднреА рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд╕реНрддреБ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдереЛрдХ рдирд┐рд░рд╕рди рдпрд╛ рдмрд▓реНрдХ рд╡рд┐рджреНрд░реЛрд╣ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд╣рдо рдмрд╛рдж рдореЗрдВ рдЖрдПрдВрдЧреЗред
рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкрдХреНрд╖рдкрд╛рддрдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рдЪрд╛рди рдХреЗ рд╣реИрд╢ рдХреЛрдб рдФрд░ рдереНрд░реЗрдбрд┐рдб + рдпреБрдЧ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рдирд╣реАрдВ рдерд╛? рдФрд░ рдпрд╣ рдРрд╕рд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рд╣реИ: рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдореЗрдВ, System.identityHashCode рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд░рд┐рд╡реЛрдХ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдореЙрдирд┐рдЯрд░ рд╡реНрдпрд╕реНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдХреЛ рдорд╛рд░реНрдХ рд╡рд░реНрдб рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрд╕рд▓реА рдорд╛рд░реНрдХ рд╢рдмреНрдж рд╕реНрдЯреЛрд░ рд╣реЛрддрд╛ рд╣реИ ред рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдХреЗ рдвреЗрд░ рдкрд░ рдХрдИ "рдЦрдВрдб" рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВред рд╣рдо рдЙрд╕ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд▓реЙрдХ рд░рд┐рдХреЙрд░реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рд╡рд╣рд╛рдВ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рд░реНрдХ рд╡рд░реНрдб рдХреЛ рдПрдХ рд╣рд▓реНрдХреЗ рд▓реЙрдХ рд╕реЗ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╡реИрд╕реЗ, рдкрддрд▓реА-рдмрдВрдж рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдЯреИрдХ рд▓реЙрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕реВрдЬреЗ рд╣реБрдП рдореЙрдиреАрдЯрд░ рдХреЛ рдЙрд╕ рдзрд╛рд░рд╛ рдореЗрдВ рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдлреБрд▓рд╛рдпрд╛ рдФрд░ рдореЛрдЯреЗ рдореЙрдирд┐рдЯрд░ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкреВрд▓ рдореЗрдВред

рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред

synchronized рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг

рдЖрдЗрдП рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:
 1 2 3 4 5 6 7 
 public class SynchronizedSample { void doSomething() { synchronized(this) { // Do something } } } 

рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрдХрд▓рди рд╣реИ:

 javac SynchronizedSample.java && javap -c SynchronizedSample 

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

 void doSomething(); Code: 0: aload_0 //    this 1: dup //    (this) 2: astore_1 //      (this)   1 3: monitorenter //   ,     (this) 4: aload_1 //   this   5: monitorexit //   6: goto 14 //  "catch-" 9: astore_2 // (  ,   )     2 10: aload_1 //  this    11: monitorexit //   12: aload_2 //      13: athrow //   14: return //  Exception table: from to target type 4 6 9 any //      ,   "catch-" 9 12 9 any //   ,     


рдпрд╣рд╛рдБ рд╣рдо monitorenter рдФрд░ monitorexit рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдпреИрдВрдбреЗрдХреНрд╕ рдЦреЛрдЬ рдЗрдВрдЬрди рдореЗрдВ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рд╕реВрдЪрдирд╛ рд╕реЗ рднрд░рд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЕрднреА-рдЕрднреА OpenJDK рд╕реНрд░реЛрдд рдорд┐рд▓реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЖрдо рддреМрд░ рдкрд░ рдордЬрд╝реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрди рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЛрдб рдореЗрдВ рдмрд╛рдпреЛрдЯреЗрдХ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдХреИрд╡рд┐рдПрдЯ рд╣реИ: рд▓реЗрд╕рд╛ рдереЗрд╢реЗрдб рд╢рд┐рдкрд┐рд▓реЗрд╡ рдиреЗ рдХрд╣рд╛ рдХрд┐
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд╡реАрдПрдо рд╣реЗрд▓реНрдкрд░ рдХрд╛ рдХреЛрдб рдЬреЗрдЖрдИрдЯреА рджреНрд╡рд╛рд░рд╛ рдЪрд┐рдкрдХрд╛рдП рдЧрдП рд╕рд╛рдордЧреНрд░реА рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рддрдХ рдХрд┐ рдЬреЗрдЖрдИрдЯреА рдХреА рдУрд░ рд╕реЗ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЗрд╡рд▓ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

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

monitorenter


рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реНрд░реЛрдд hotspot/src/share/vm/interpreter , рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВред рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ grep рдХреА рдорджрдж рд╕реЗ рд╣рдо рдЙрди рдЬрдЧрд╣реЛрдВ рдХреЛ grep рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╣рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ bytecodes.hpp рдФрд░ bytecodes.cpp рдореЗрдВ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
 ./bytecodes.hpp:235: _monitorenter = 194, // 0xc2 ./bytecodes.cpp:489: def(_monitorenter, "monitorenter", "b", NULL, T_VOID, -1, true); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, bytecode .hpp рд▓рд┐рдП рдПрдХ рдорд╛рдирд╡ .hpp рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ .hpp рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ .cpp рдореЗрдВ .hpp рдкрджреНрдзрддрд┐ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рд╣реИ: рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рдХрд┐ рдирд┐рдЧрд░рд╛рдиреАрдХрд░реНрддрд╛ рдХрдорд╛рдВрдб monitorenter , рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ ( b ) рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдПрдХрд▓ рдмрд╛рдпреЛрдЯреЗрдХ рд╣реИ, рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд╕реНрдЯреИрдХ рд╕реЗ рдПрдХ рдорд╛рди рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рд▓реЙрдХ рдпрд╛ рдХреЙрд▓рд┐рдВрдЧ рд╕реЗрдлрдкреЙрдЗрдВрдЯ рдХреЛ рднрдбрд╝рдХрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ ( рдмрд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд bytecodeInterpreter.cpp рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд░реБрдЪрд┐ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд BytecodeInterpreter::run(interpreterState istate) , рдЬреЛ рдХреЗрд╡рд▓ 2200 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрддреА рд╣реИ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд▓реВрдк рдореЗрдВ рдШреВрдорддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рд╢рд░реАрд░ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдФрд░ рдмрдбрд╝рд╛ рдЯреБрдХрдбрд╝рд╛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛, рд▓реЙрдХ рдХрд░рдирд╛ рдпрджрд┐ рд╡рд┐рдзрд┐ synchronized , рдФрд░ рдкрд╕рдВрдж рд╣реИ)ред рдЕрдВрдд рдореЗрдВ, рд░реЗрдЦрд╛ 1667 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЬрдм monitorenter рдСрдкрд░реЗрд╢рди рдХрд╛ monitorenter рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ monitorenter ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рдирд┐рд╢реБрд▓реНрдХ рдореЙрдирд┐рдЯрд░ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░ рд╕реЗ istate->set_msg(more_monitors) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдХреА рдПрдХ рдЕрдирд▓реЙрдХ рдХреЙрдкреА рд╡рд╣рд╛рдВ рд░рдЦреА рдЬрд╛рддреА рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕реАрдПрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдЪрд┐рд╣реНрди рд╢рдмреНрдж рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реЗрдбрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреИрд╕ - рддреБрд▓рдирд╛ рдФрд░ рдЕрджрд▓рд╛ - рдмрджрд▓реА, рддреБрд▓рдирд╛ *dest compare_value рдФрд░ compare_value , рдФрд░ рдЕрдЧрд░ рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ, *dest рд╕реНрдерд╛рдиреЛрдВ exchange_value *dest compare_value рдФрд░ exchange_value ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп *dest рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред (рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рджреЛ-рддрд░рдлрд╛ рдореЗрдордмрд░ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ)

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

рдпрджрд┐ CAS рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛, рддреЛ рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЙрдирд┐рдЯрд░ (рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреИрдкреНрдЪрд░) рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ; рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╕рдлрд▓рддрд╛ рдлрд┐рд░ рд╕реЗ рд╣рдорд╛рд░реА рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдХ NULL рдкрд░ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реЗрдбрд░ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА NULL (рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ)ред рдЕрдиреНрдпрдерд╛, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:

 CALL_VM(InterpreterRuntime::monitorenter(THREAD, entry), handle_exception); 


рдореИрдХреНрд░реЛ CALL_VM рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдХрдиреАрдХреА рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдлреНрд░реЗрдо рдмрдирд╛рдирд╛, рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди InterpreterRuntime::monitorenter , рдЬреЛ рдирдИ interpreterRuntime.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред UseBiasedLocking рд╡рд┐рдзрд┐, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ UseBiasedLocking , рдпрд╛ рддреЛ ObjectSynchronizer::fast_enter рдпрд╛ ObjectSynchronizer::slow_enter ред рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

fast_enter


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдЖрдИрдмреАрдПрдо рд░рд┐рд╕рд░реНрдЪ рд▓реИрдмреНрд╕ рдХреЗ рдХреБрдЫ рдЯреЛрдХреНрдпреЛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдиреЗ рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдБрдХрдбрд╝реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдФрд░ рднреА рдордЬрдмреВрдд рдмрдпрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдореЙрдирд┐рдЯрд░реЛрдВ рдХреЛ рдЕрдкрдиреЗ рдкреВрд░реЗ рдЬреАрд╡рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рд░рд╛ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдкрдХреНрд╖рдкрд╛рддрдкреВрд░реНрдг рддрд╛рд▓рд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреИрджрд╛ рд╣реБрдЖ: рдЬреЛ рднреА рдкрд╣рд▓реЗ рдЙрда рдЧрдпрд╛, рд╡рд╣ рдФрд░ рдЪрдкреНрдкрд▓ред рдЖрдк рдкрдХреНрд╖рдкрд╛рддреА рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрди рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдкрд░ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдереЛрдбрд╝реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ), рдФрд░ рд╣рдо рд╣реЙрдЯрд╕реНрдкреЙрдЯ рд╕реНрд░реЛрддреЛрдВ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред рдЕрдм рд╣рдо рдлрд╝рд╛рдЗрд▓ src/share/vm/runtime/synchronizer.cpp рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рд╛рдЗрди 169 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрдк рдкрд░ рд░реАрдмрд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд░рд┐рд╡реЛрдХ рдХрд░реЗрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдзреАрдореЗ рдзреАрдореЗ рдЬрд╛рдПрдВред BiasedLocking::revoke_and_rebias рдореЗрдВ BiasedLocking::revoke_and_rebias рдкреНрд░рдпрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ BiasedLocking::revoke_and_rebias biasedLocking.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд BiasedLocking::revoke_and_rebias ред рдЖрдЗрдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реЗрдВ:


рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдКрдВрдЧрд╛ рдЬреЛ рдЬрд╛рдирддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЯреАрдПрдо рднреВрд▓ рдЧрдП , рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ:
рд╕реЗрдлрдкреЙрдЗрдВрдЯ - рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд┐рд╕рдореЗрдВ рдереНрд░реЗрдб рдирд┐рд╖реНрдкрд╛рджрди рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдШреБрд╕рдкреИрда рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░рдирд╛ рдХрд┐ рдзрд╛рдЧрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рд▓рд┐рдХ рд╣реИ, рдбреАрдУрдкрд┐рдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди, рдпрд╛ рдереНрд░реЗрдб рдбрдВрдк рд▓реЗрдирд╛ред


рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ attempt_rebias рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрд╢рд╛ true рд╣реЛрддрд╛ true , рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ false рд╣реЛ рд╕рдХрддрд╛ false : рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рд╡реАрдПрдо рдереНрд░реЗрдб рд╕реЗ рдХреЙрд▓ рдЖрддрд╛ рд╣реИред

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

рдпрджрд┐ рдзрд╛рд░рд╛ рдХреЛ рддреНрд╡рд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ (рдпрд╛рдиреА, рд░рд┐рд╡реЛрдХ рдмрд╛рдпрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛), рд╣рдо рдкрддрд▓реЗ-рд▓реЙрдХ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

slow_enter


рд╡рд╣ рд╡рд┐рдзрд┐ рдЬреЛ рдЕрдм рд╣рдореЗрдВ src/share/vm/runtime/synchronizer.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВред

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

  2. рдХреЗрд╕ рдЯреВ рднреА "рдЕрдЪреНрдЫрд╛" рд╣реИ : рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдореЙрдирд┐рдЯрд░ рдореБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕реА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рд╡реНрдпрд╕реНрдд рд╣реИ рдЬреЛ рдЕрдм рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрдмреНрдЬрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╕реНрдЯреИрдХ NULL рдореЗрдВ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реЗрдбрд░ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╣реА рд╣рдордиреЗ рдЗрд╕ рдореЙрдирд┐рдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдХреИрдкреНрдЪрд░ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред

  3. рдХреЗрд╕ рдереНрд░реА, "рдмреБрд░рд╛" рднрдбрд╝рдХрддрд╛ рд╣реИ : рдЗрд╕рд▓рд┐рдП, рдЕрд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд╛рд▓ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд░рд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдФрд░ segfault рд╕реЗ рдЧрд┐рд░ рдЬрд╛рддреЗ рд╣реИрдВред Hahaред рдПрдХ рдЪреБрдЯрдХреБрд▓рд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдкреЙрдЙрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛: рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдм рдЖрдкрдХреЛ "рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ" рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдУрдПрд╕ рд╕реНрддрд░ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддреЗ рд╣реБрдП, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдХреЛ рдлреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдХреЛрдб рдореЗрдВ, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ ObjectSynchronizer::inflate рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рдзрд┐ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░, рдХреБрдЫ рддрдХрдиреАрдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдзреНрд╡рдЬ рдХреЛ рдореЙрдирд┐рдЯрд░ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлреВрд▓рд╛ рд╣реБрдЖ рд╣реИред

    рдореЙрдирд┐рдЯрд░ рдХреЛ рдлреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред ObjectMonitor::enter рд╡рд┐рдзрд┐ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐, рдзрд╛рд░рд╛ рдХреЛ ObjectMonitor::enter рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд▓реНрдкрдиреАрдп рдФрд░ рдЕрдХрд▓реНрдкрдиреАрдп рддрд░рдХреАрдмреЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рдЗрди рдЪрд╛рд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╕реНрдкрд┐рди рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕, рдПрдХ рдмрд╛рд░ CAS-s рдФрд░ рдЕрдиреНрдп "рдлреНрд░реА рдореЗрдердбреНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд╡реИрд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝реА рд╡рд┐рд╕рдВрдЧрддрд┐ рдорд┐рд▓реАред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдХ рд╕реНрдкрд┐рди рд▓реВрдк рдХреЗ рд╕рд╛рде рдореЙрдирд┐рдЯрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

     352 353 354 355 356 357 358 359 360 361 362 363 
     // Try one round of spinning *before* enqueueing Self // and before going through the awkward and expensive state // transitions. The following spin is strictly optional ... // Note that if we acquire the monitor from an initial spin // we forgo posting JVMTI events and firing DTRACE probes. if (Knob_SpinEarly && TrySpin (Self) > 0) { assert (_owner == Self , "invariant") ; assert (_recursions == 0 , "invariant") ; assert (((oop)(object()))->mark() == markOopDesc::encode(this), "invariant") ; Self->_Stalled = 0 ; return ; } 


    рдФрд░ рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рддрдерд╛рдХрдерд┐рдд enterI рд╡рд┐рдзрд┐ рдореЗрдВ, enterI рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдмреЛрд▓рддреЗ рд╣реИрдВ:

     485 486 487 488 489 490 491 492 493 494 495 496 497 
     // We try one round of spinning *before* enqueueing Self. // // If the _owner is ready but OFFPROC we could use a YieldTo() // operation to donate the remainder of this thread's quantum // to the owner. This has subtle but beneficial affinity // effects. if (TrySpin (Self) > 0) { assert (_owner == Self , "invariant") ; assert (_succ != Self , "invariant") ; assert (_Responsible != Self , "invariant") ; return ; } 


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

    рдкрд╛рд░реНрдХрд┐рдВрдЧ рдХреА рд╡рд┐рдкрд░реАрдд рдзрд╛рд░рд╛рдПрдБ

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

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

     591 592 593 594 595 596 597 598 599 600 601 
     // park self if (_Responsible == Self || (SyncFlags & 1)) { TEVENT (Inflated enter - park TIMED) ; Self->_ParkEvent->park ((jlong) RecheckInterval) ; // Increase the RecheckInterval, but clamp the value. RecheckInterval *= 8 ; if (RecheckInterval > 1000) RecheckInterval = 1000 ; } else { TEVENT (Inflated enter - park UNTIMED) ; Self->_ParkEvent->park() ; } 


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

    рдЕрдм рдкрд╛рд░реНрдХрд┐рдВрдЧ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╛рдЯреНрд╕ wait/notify рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рдорд╛рди рд╣реА рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдХреБрдЫ рд╣реИ, рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕реНрддрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, linux рдФрд░ bsd рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, POSIX рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ pthread_cond_timedwait (рдпрд╛ pthread_cond_wait ) рдХреЛ рдореЙрдиреАрдЯрд░ рдХреЛ рдлреНрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдБ Linux рдереНрд░реЗрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ WAITING рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╢реЗрдбреНрдпреВрд▓рд░ рд╕реЗ рдкреВрдЫрддреА рд╣реИрдВ рдХрд┐ рдЬрдм рдХреЛрдИ рдШрдЯрдирд╛ рдШрдЯрддреА рд╣реИ (рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдпрд╣ рдзрд╛рдЧрд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдирд╣реАрдВ)ред

    OS рд╕реНрддрд░ рдереНрд░реЗрдб рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ

    рдЦреИрд░, рдпрд╣ рд▓рд╛рдЗрдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдЖрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд╣рд╛рдВ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдирдХреНрд╕ рд╕реНрд░реЛрдд, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЧрд┐рдЯ рдореЗрдВ рд╣реИрдВ, рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

     git clone git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-rt.git 


    рдЪрд▓реЛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдУ ... рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдореИрдВ рдордЬрд╛рдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рддрдХ рд▓рд┐рдирдХреНрд╕ рд╢реЗрдбрдпреВрд▓рд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд╣рдЬ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЧрд╣рд░реА рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг synchronized рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ :) рдХрдЯреНрдЯрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ; рджреЛрдиреЛрдВ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВред - , , : тАФ , . тАФ quantum тАФ , , , . linux , 10-200 , 1 . windows , 2-15 , тАФ 10 15 .

    , , , . , , (, - I/O-), , - . - . , , , -, , .

    , , , тАФ . , , , , , , .

    , , : , тАФ , . : , , -, .

    , , , . , contention, .


monitorexit


рдкрдХреНрд╖рдкрд╛рддреА рддрд╛рд▓рд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реЗрдбрд░ NULL рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╕ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИ: рдЬрдм рдЖрдк рдПрдХ рдкрдХреНрд╖рдкрд╛рддреА рддрд╛рд▓рд╛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛ IllegalMonitorStateException(рд▓реЗрдХрд┐рди рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдмрд╛рдпрдЯреЗрдХреЛрдб рд╡реЗрд░рд┐рдлрд╛рдпрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ)ред

рдирд┐рд╖реНрдкрдХреНрд╖ рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ InterpreterRuntime::monitorexitред рдХрдИ рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рдмрд╛рдж (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ рдореЙрдирд┐рдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЙрдХ рд╣реИ: рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ IllegalMonitorStateExceptionрдЬрд╛рддрд╛ рд╣реИ) рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ObjectSynchronizer::slow_exit, рдЬреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ fast_exitред рдпрджрд┐ рдЖрдк рд╕реНрд░реЛрдд рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рддреЗрдЬ рдкрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╕рдВрднрд╡ рд╣реИрдВ: рдореЙрдирд┐рдЯрд░ рд╕реНрдЯреИрдХ-рд▓реЙрдХ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реИ ,рдмрдврд╝рд╛-рдЪрдврд╝рд╛рдХрд░ рдпрд╛ рдлреБрд▓рд╛рдпрд╛ ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░ рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд▓реЙрдХ рд╕реЗ рдкрд╣рд▓реЗ рдерд╛, рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрд┐рд╕реА рдХреА рдирд┐рдЧрд░рд╛рдиреА рдЦрддреНрдо рдХрд░рдиреЗ рдФрд░ рддреАрд╕рд░реЗ рдорд╛рдорд▓реЗ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рддреАрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд▓реЙрдХ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЭрд┐рд▓реНрд▓реА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдм рдХреЛрдИ рдкрд╛рд░реНрдХ рдХреА рдЧрдИ рдзрд╛рд░рд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрд╛рд▓рд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рд╡рд╣ рдЬрд╛рдЧрддрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрдирд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, TrySpin(рдКрдкрд░ рджреЗрдЦреЗрдВ)ред рдЕрдЧрд░ рдпрд╣ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рднреА рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЕрдЧрд░ рдзрд╛рдЧреЗ рдХреА рдХрддрд╛рд░ рдЬреЛ рддрд╛рд▓рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЦрд╛рд▓реА рд╣реИред

рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ, рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ (рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)Knob_QModeред рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдПрдХ рднреА рдЬрдЧрд╣ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рдЬрд╣рд╛рдВ 0рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓рддрд╛ рд╣реИ ред рдЬрд╛рдирдХрд╛рд░ рд▓реЛрдЧреЛрдВ рдЯреАрдПрдо , рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛) рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рдЕрд╡рд╢реЗрд╖, рдХрд┐рд╕реА рдХрд╛ рдЪрдпрди рдкрд╣рд▓реЗ рдЬрдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпреЗ рдРрд╕реА рдзрд╛рд░рд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рдЧ рдЧрдИрдВ, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рдЧ рдЧрдИрдВред рдХреЙрд▓ рдХреА рдПрдХ рдЫреЛрдЯреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рдж, рд╣рдо рдЦреБрдж рдХреЛ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ os::PlatformEvent::unpark(), рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, linux рдФрд░ bsd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ pthread_cond_signalред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╣ рд╕рдм рд╣реИ рдЬреЛ рдореЙрдирд┐рдЯрд░ рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирд╛рдпрдм: synchronizedрддрд░реАрдХреЗ


рдЕрдЧрд░ рд╣рдордиреЗ рдЕрдкрдирд╛ рдореВрд▓ рдЬрд╛рд╡рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рд╣реИ:
 synchronized void doSomething() { // Do something } 

рддрдм рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рдЗрдЯрдХреЛрдб рдХрд╛рдлрд╝реА рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ:

 synchronized void doSomething(); Code: 0: return 


рдЗрди- bytecodeInterpreter.cpp synchronizedрд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 767ред рдПрдХ рдЪреЗрдХ рд╣реИ if (METHOD->is_synchronized())ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрджрд░ ifрдкрдХреНрд╖рдкрд╛рддреА рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдПрд╕ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЧреБрдЪреНрдЫрд╛ рд╣реИ ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрдЪрд╛рдирдХ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ monitorenterред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдереА, рд╡рд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рд▓рд┐рдХ рдзрд╛рдЧреЗ рджреНрд╡рд╛рд░рд╛ рдкрдХреНрд╖рдкрд╛рддреА рдореЙрдирд┐рдЯрд░ рдкрд░ рдЕрднреА рднреА рдПрдХ рддреНрд╡рд░рд┐рдд (рдХреИрд╕ рдХреЗ рдмрд┐рдирд╛) рдХрдмреНрдЬрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдирд┐рдХрд╛рдп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рд╡рд┐рдзрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рдореЙрдирд┐рдЯрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ


рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг synchronizer.cpp377 рд▓рд╛рдЗрди рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ ред рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ / рд╕реВрдЪрдирд╛ рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рдлреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬ рдЗрд╕реЗ рдлреБрд▓рд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рд╡реЗ рдЙрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ waitрдпрд╛ notifyред

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

Notifyрдпрд╣ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗрдЯ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореЙрдирд┐рдЯрд░ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреА рдХрддрд╛рд░ рдореЗрдВ рдХреБрдЫ рдЬрдЧрд╣ рдкрд░ред NotifyAllрдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рднрд┐рдиреНрдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред

рд╕реНрдореГрддрд┐ рдкреНрд░рднрд╛рд╡


рдЬреЗрдПрдордПрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЙрд╕реА рдореЙрдирд┐рдЯрд░ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ ред рдкрддрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреИрд╕ рджреНрд╡рд╛рд░рд╛ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ; рдлреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИOrderAccess::fence(); редрдпрджрд┐ рдореЙрдирд┐рдЯрд░ рдкрдХреНрд╖рдкрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрд╛рд░рдВрдЯреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрд░реНрдбрд░ рдореЗрдВ рд╣реИред рдЬрдм рд░рд┐рд╡реЛрдХ рдПрдЪрдмреА рдпрд╛ рддреЛ рдореЛрдирд┐рдЯреЛрд░реЗрдХреНрд╕рд┐рдЯ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╕реНрдЯреНрд░реАрдо рдЬреАрд╡рд┐рдд рдереА (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд▓реА рдпрд╛ рдлреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдпрд╛ рдЬрдм рдкреНрд░рд╡реЗрд╢ (рдЬреЛ рдпрд╛ рддреЛ рдкрддрд▓рд╛ рдпрд╛ рдлреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдПрдЪрдмреА рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдмрд╛рдбрд╝ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореЗрдЬрд░ рдУред рдЙрд░реНрдлрд╝ рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА

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

рджреЗрдЦрддреЗ рд░рд╣реЛ

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

рдФрд░ рдПрдХ рдФрд░ рдмрд╛рдд ┬й

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпрд╛рддреНрд░рд╛ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдореИрдВрдиреЗ jdk7u рд╕реЗ 144f8a1a43cb рд╕рдВрд╢реЛрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред рдпрджрд┐ рдЖрдкрдХрд╛ рд╕рдВрд╢реЛрдзрди рдЕрд▓рдЧ рд╣реИ, рддреЛ рд▓рд╛рдЗрди рдирдВрдмрд░ рднреА рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдХреЗ.рдУ.

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

рд╕рднреА рд╕реЗрдлрдкреЙрдЗрдВрдЯ рдкрд░, рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ ObjectSynchronizer::deflate_idle_monitorsрдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдкреБрдХрд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИред

рдмрд╣рд╛рджреБрд░ TheShade , artyushov , cheremin рдФрд░ AlexeyTokar рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ (рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдкрдврд╝рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдЬрдирддрд╛ рдХреЛ рдирд╣реАрдВ рд▓рд╛рдКрдВрдЧрд╛, рдкреНрд░рдХрд╛рд╢ рдХреЗ рдмрдЬрд╛рдп, рдХреБрдЫ рдмрдХрд╡рд╛рд╕, рдмреЗрд╡рдХреВрдл рдЪреБрдЯрдХреБрд▓реЗ рдФрд░ рдЕрдлрд╡рд╛рд╣реЛрдВ рд╕реЗ рднрд░рд╛ рд╣реБрдЖред

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


All Articles