(рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдкреЛрд╕реНрдЯ "рдореИрдВрдиреЗ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдХреНрд▓реЛрди рдХрд┐рдпрд╛, рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рджреЗрдЦреЗрдВ")рд╣рд░ рдХреЛрдИ рдЬреЛ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рдорд╕реНрдпрд╛рдУрдВ (рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЗрдЗрдЬрд╝реИрдЧреИрдм) рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореБрджреНрд░рд╛рд╕реНрдлреАрддрд┐, рд╡рд┐рд╡рд╛рдж, рдореЗрдореНрдмрд░, рдкрдХреНрд╖рдкрд╛рддреА рд▓реЙрдХрд┐рдВрдЧ, рдереНрд░реЗрдб рдкрд╛рд░реНрдХрд┐рдВрдЧ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рддрд░рд╣ рд╢рд░реНрддреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рд░ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ,
рд╕рднреА рдирд╣реАрдВ ред
рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ
"рдкрд╣рд▓реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рд╕реНрд░реЛрдд рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ ред
" рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд╣рд▓рд╛ рднрд╛рдЧ рдХрд╛рдлреА рд╣рдж рддрдХ рди рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд░реНрдгрди рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рд╡рд╛ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЗ рдЕрдЪреНрдЫреЗ рдЬрд╛рдирдХрд╛рд░ рд╣реИрдВред рдЖрдк рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрдЧреЗрдИ
рд╡рд╛рд▓рд░рд╕ рдХреБрдХреНрд╕реЗрдВрдХреЛ рдХреА
рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдкрд░ рдпрд╛ рдореЗрд░реЗ
рд╢реБрд░реБрдЖрддреА рд╡рд┐рд╖рдп рдкрд░ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрд▓рд╛рдЗрдб # 38 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдпрд╣
рдкреНрд░рд╕реНрддреБрддрд┐ рдорд╣рд╛рди рд╕рд╛рдордЧреНрд░реА рд╣реИред
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдиреНрдпреВрдирддрдо
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЕрдкрдирд╛
рдореЙрдирд┐рдЯрд░ рд╣реЛрддрд╛ рд╣реИ , рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рдорд╛рди C ++ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореНрдпреВрдЯреЗрдХреНрд╕-рдПрд╕ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдмрд╣рд┐рд╖реНрдХрд░рдг рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рди рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдореЙрдирд┐рдЯрд░рд░ : рдореЙрдирд┐рдЯрд░ рдХреИрдкреНрдЪрд░ред рдПрдХ рд╕рдордп рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рд╣реА рдПрдХ рдореЙрдирд┐рдЯрд░ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдореЙрдирд┐рдЯрд░ рдХреИрдкреНрдЪрд░ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рдордп рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдереНрд░реЗрдб рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрддрд╛рд░ рдореЗрдВ рдХрдИ рдереНрд░реЗрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- monitorexit : рдореБрдлреНрдд рдореЙрдирд┐рдЯрд░
- рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ : рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЛ рдореЙрдирд┐рдЯрд░ рдХреЗ рддрдерд╛рдХрдерд┐рдд рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗрдЯ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдФрд░
notify
рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред wait
рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рднреА рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЙрдирд┐рдЯрд░ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдб рдХреЗ рдмрд╛рдж, рдХреЛрдИ рднреА рдереНрд░реЗрдб рдореЙрдирд┐рдЯрд░ рдкрд░ рдЕрдзрд┐рдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред - рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ (рд╕рднреА) : рдЙрди рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ (рдпрд╛ рд╕рднреА) рдХреЛ рдЬрдЧрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЙрдирд┐рдЯрд░ рдХреЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗрдЯ рдореЗрдВ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рдЧреГрдд рдзрд╛рд░рд╛ рдХреЛ рдореЙрдиреАрдЯрд░ (рдирд┐рдЧрд░рд╛рдиреАрдХрд░реНрддрд╛) рдкрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрдмреНрдЬрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рд╡рд┐рд╡рд╛рдж - рдПрдХ рд╕реНрдерд┐рддрд┐ рдЬрдм рдХрдИ рдЗрдХрд╛рдЗрдпрд╛рдВ рдПрдХ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдХреЗ рдХрдмреНрдЬреЗ рдкрд░ рдПрдХ рд╡рд┐рд╡рд╛рдж рд╣реИ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдирд┐рдЯрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
- init : рдореЙрдирд┐рдЯрд░ рдЕрднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рддрдХ рдХрд┐рд╕реА рдиреЗ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ
- рдкрдХреНрд╖рдкрд╛рддреА : (рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдХреВрд▓рди, рдЬреЛ рддреБрд░рдВрдд рджреВрд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛) рдореЙрдирд┐рдЯрд░ рдкрд╣рд▓реЗ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП "рдЖрд░рдХреНрд╖рд┐рдд" рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рдВрдЧреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреИрдкреНрдЪрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдХреИрдкреНрдЪрд░ рджреВрд╕рд░реА рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╛ рддреЛ рдореЙрдирд┐рдЯрд░ рдЙрд╕рдХреЗ ( рд░рд┐рдмрд╛рд╕ ) рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЖрд░рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдореЙрдирд┐рдЯрд░ рдПрдХ рдкрддрд▓реА рд╕реНрдерд┐рддрд┐ ( рд░рд┐рд╡реЛрдХ рдмрд╛рдпрд╕ ) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди рднреА рд╣реИрдВ рдЬреЛ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рддреБрд░рдВрдд рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдирд┐рдЧрд░рд╛рдиреА рд╡реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ( рдереЛрдХ рдирд┐рд░рд╕реНрдд / рд╡рд┐рджреНрд░реЛрд╣ )
- рдкрддрд▓реА : рдХрдИ рдзрд╛рд░рд╛рдПрдВ рдореЙрдирд┐рдЯрд░ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡рд┐рд╡рд╛рдж рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рд╡реЗ рдЗрд╕реЗ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдпрд╛ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдУрд╡рд░рд▓реИрдк рдХреЗ рд╕рд╛рде рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ) ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдмреНрдЬрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддреЗ рдХреИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд┐рд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореЙрдирд┐рдЯрд░ рдлреБрд▓рд╛рдпрд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ
- рд╡рд╕рд╛ / рдлреБрд▓рд╛рдпрд╛ : рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзрд╛рд░рд╛ рдкрд╛рд░реНрдХ рдФрд░ рд╕реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдореЙрдиреАрдЯрд░ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЙрд╕рдХреА рдмрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рд╕рдВрджрд░реНрдн рдХреЛ рдмрджрд▓рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдзрд╛рдЧрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рд╢реЗрдбреНрдпреВрд▓рд░ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗ рдЙрддрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рдмреАрдд рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╡рд┐рд╡рд╛рдж рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЙрдирд┐рдЯрд░ рдПрдХ рдкрддрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИ
рдЗрд╕ рдЕрдореВрд░реНрдд рддрд░реНрдХ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрдВ рдбреВрдмреЗ рд╣реБрдП рд╣реИрдВред
рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░
рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЕрдВрджрд░, рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рджреЛ рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП
рд╢рдмреНрдж рдФрд░ рдПрдХ рд╕реВрдЪрдХред рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд╣рд╛рдВ рдХреБрдЫ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИред рдпреЗ рд╣реЗрдбрд░ рддрдерд╛рдХрдерд┐рдд
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) { |
рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрдХрд▓рди рд╣реИ:
javac SynchronizedSample.java && javap -c SynchronizedSample
рдореИрдВ рдкреВрд░реА рд╕реВрдЪреА рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди
doSomething
рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ
doSomething
, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
void doSomething(); Code: 0: aload_0
рдпрд╣рд╛рдБ рд╣рдо
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
ред рдЖрдЗрдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реЗрдВ:
- рд░реЗрдмреАрдЬ - рдПрдХ рдзрд╛рд░рд╛ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рдореЙрдирд┐рдЯрд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдореЙрдиреАрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рднреА рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдЧреБрдордирд╛рдо рдкрдХреНрд╖рдкрд╛рддреА ), рдпрд╛ рдпрджрд┐ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЛ рдкрд┐рдЫрд▓реЗ рдпреБрдЧ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдмрд▓реНрдХ рд░рд┐рд╡реЛрдХреЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ), рдЬреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдорд╛рди рд╣реИред рдХреЛрдИ рднреА рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, fast_enter (
attempt_rebias = false
) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ fast_enter
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред - рдирд┐рд░рд╕реНрдд рдХрд░реЗрдВ - рдореЙрдирд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдкрдХреНрд╖рдкрд╛рддреА рд▓реЙрдХрд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм
attempt_rebias
false
рд╕реЗрдЯ рд╣реЛрддрд╛ false
ред рдпрджрд┐ рдореЙрдирд┐рдЯрд░ рдЕрдм рдХрд┐рд╕реА рдЕрдиреНрдп рд▓рд╛рдЗрд╡ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рд╣реИ, рддреЛ рд░реАрдмрд┐рдпрд╛ рдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рди рдкрд░ рд░реЛрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдЗрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕реНрдЯреИрдХ рдкрд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╡рд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореЙрдирд┐рдЯрд░ рд╣реЗрдбрд░ рдХреЛ рдирд┐рд╖реНрдкрдХреНрд╖ рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░реЗрдЧрд╛ред - рдереЛрдХ рд╡рд┐рджреНрд░реЛрд╣ - рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЬреАрд╡рд┐рдд рдФрд░ рдмрд╛рдж рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╡рд┐рджреНрд░реЛрд╣ред рдЗрд╕реЗ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕ рдпреБрдЧ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рджреНрд░реЛрд╣ рдпрд╛ рдкреБрдирд░реНрдмреАрдорд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ BiasedLockingBulkRebiasThreshold рд╕реЗ рдЕрдзрд┐рдХ
BiasedLockingBulkRebiasThreshold
ред рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реБрдП, рдпреБрдЧ рдХрд╛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред - рдмрд▓реНрдХ рд░рд┐рд╡реЛрдХ - рд╕рднреА рдЬреАрд╡рд┐рдд рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рдж рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕реЗ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕ рдпреБрдЧ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрд╛рд╡рд░реНрддрди рдпрд╛ рдкреБрдирд░реНрдмреАрдорд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ BiasedLockingBulkRevokeThreshold рд╕реЗ рдЕрдзрд┐рдХ
BiasedLockingBulkRevokeThreshold
ред рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реБрдП, рдпреБрдЧ рдХрд╛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдКрдВрдЧрд╛ рдЬреЛ
рдЬрд╛рдирддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЯреАрдПрдо рднреВрд▓ рдЧрдП , рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ:
рд╕реЗрдлрдкреЙрдЗрдВрдЯ - рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд┐рд╕рдореЗрдВ рдереНрд░реЗрдб рдирд┐рд╖реНрдкрд╛рджрди рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдШреБрд╕рдкреИрда рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░рдирд╛ рдХрд┐ рдзрд╛рдЧрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рд▓рд┐рдХ рд╣реИ, рдбреАрдУрдкрд┐рдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди, рдпрд╛ рдереНрд░реЗрдб рдбрдВрдк рд▓реЗрдирд╛ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ
attempt_rebias
рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрд╢рд╛
true
рд╣реЛрддрд╛
true
, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣
false
рд╣реЛ рд╕рдХрддрд╛
false
: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рд╡реАрдПрдо рдереНрд░реЗрдб рд╕реЗ рдХреЙрд▓ рдЖрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдереЛрдХ рд╕рдВрдЪрд╛рд▓рди рдореБрд╢реНрдХрд┐рд▓ рдЕрдиреБрдХреВрд▓рди рд╣реИрдВ рдЬреЛ рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рд╣реЛрддрд╛, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
UseBiasedLocking
рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЦрддрд░рдирд╛рдХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╡рд░реНрдЧ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рджреНрд░реЛрд╣реЛрдВ рдФрд░ рд╡рд┐рджреНрд░реЛрд╣ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдзрд╛рд░рд╛ рдХреЛ рддреНрд╡рд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ (рдпрд╛рдиреА, рд░рд┐рд╡реЛрдХ рдмрд╛рдпрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛), рд╣рдо рдкрддрд▓реЗ-рд▓реЙрдХ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
slow_enter
рд╡рд╣ рд╡рд┐рдзрд┐ рдЬреЛ рдЕрдм рд╣рдореЗрдВ
src/share/vm/runtime/synchronizer.cpp
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВред
- рдХреЗрд╕ рдПрдХ, "рдЕрдЪреНрдЫрд╛" : рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдореЙрдирд┐рдЯрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдлреНрдд рд╣реИред рдлрд┐рд░ рд╣рдо рдХреИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдХреИрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░-рдирд┐рд░реНрднрд░ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд) рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░реБрд╕реНрд▓рд╛рди # рдЙрд╕реЗ рдПрдХ рдЪреЗрд░рдорд┐рди рд╣реЗрдирд╡реАрдЯ рджреЗрддреЗ рд╣реИрдВ , рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдирд╛рд░рд╛рдЬ рдерд╛ рдХрд┐ рдореБрдЭреЗ "рдПрдордУрдПрд╕ рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕реНрд░реЛрдд-рд╕рд┐рдВрдХ рдореЗрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдиреЛрдВ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛") ред рдпрджрд┐ рдХреИрд╕ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЬреАрдд: рдореЙрдирд┐рдЯрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рджреБрдЦ рд╕реЗ рднрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рддреАрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
- рдХреЗрд╕ рдЯреВ рднреА "рдЕрдЪреНрдЫрд╛" рд╣реИ : рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдореЙрдирд┐рдЯрд░ рдореБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕реА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рд╡реНрдпрд╕реНрдд рд╣реИ рдЬреЛ рдЕрдм рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрдмреНрдЬрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╕реНрдЯреИрдХ NULL рдореЗрдВ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реЗрдбрд░ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╣реА рд╣рдордиреЗ рдЗрд╕ рдореЙрдирд┐рдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдХреИрдкреНрдЪрд░ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред
- рдХреЗрд╕ рдереНрд░реА, "рдмреБрд░рд╛" рднрдбрд╝рдХрддрд╛ рд╣реИ : рдЗрд╕рд▓рд┐рдП, рдЕрд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд╛рд▓ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд░рд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдФрд░ 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 | |
рдареАрдХ рд╣реИ, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдкрд░ рдкрд╛рд░реНрдХрд┐рдВрдЧ рдЗрддрдиреА рдбрд░рд╛рд╡рдиреА рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЙрд╕рдореЗрдВ рдХреНрдпрд╛ рднрдпрд╛рдирдХ рд╣реИред
рдкрд╛рд░реНрдХрд┐рдВрдЧ рдХреА рд╡рд┐рдкрд░реАрдд рдзрд╛рд░рд╛рдПрдБ
рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдм рд╣рдо рдЙрд╕ рдХреЛрдб рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рджреЛрд╣рд░рд╛рд╡, рдкреБрдирд░реНрд░рдЪрдирд╛ рдФрд░ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, "рдЗрд╕ рдмреИрд╕рд╛рдЦреА рдХреЛ рд╣рдЯрд╛рдПрдВ" рдФрд░ "рдЗрдиреНрд╣реЗрдВ рд╕рд╛рде рдЬреЛрдбрд╝реЛ" рдЬреИрд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдереЛрдбрд╝рд╛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣реИред
рддреЛ рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рд░реНрдХрд┐рдВрдЧ рдзрд╛рд░рд╛рдУрдВ рд╣реИ? рд╕рднреА рдиреЗ рд╕реБрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдирд┐рдЯрд░ рдореЗрдВ рдПрдХ рддрдерд╛рдХрдерд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ ( рд╡реЗрдЗрдЯрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛) рддреЛ: рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХрддрд╛рд░ рд╣реИред рд╕рд╕реНрддреЗ рдореЗрдВ рдореЙрдирд┐рдЯрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдкрд╛рд░реНрдХ рдХрд░рддреЗ рд╣реИрдВ:
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() {
рддрдм рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рдЗрдЯрдХреЛрдб рдХрд╛рдлрд╝реА рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ: synchronized void doSomething(); Code: 0: return
рдЗрди- bytecodeInterpreter.cpp
synchronized
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 767
ред рдПрдХ рдЪреЗрдХ рд╣реИ if (METHOD->is_synchronized())
ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрджрд░ if
рдкрдХреНрд╖рдкрд╛рддреА рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдПрд╕ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЧреБрдЪреНрдЫрд╛ рд╣реИ ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрдЪрд╛рдирдХ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ monitorenter
ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдереА, рд╡рд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рд▓рд┐рдХ рдзрд╛рдЧреЗ рджреНрд╡рд╛рд░рд╛ рдкрдХреНрд╖рдкрд╛рддреА рдореЙрдирд┐рдЯрд░ рдкрд░ рдЕрднреА рднреА рдПрдХ рддреНрд╡рд░рд┐рдд (рдХреИрд╕ рдХреЗ рдмрд┐рдирд╛) рдХрдмреНрдЬрд╛ рд╣реИредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдирд┐рдХрд╛рдп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рд╡рд┐рдзрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рдореЙрдирд┐рдЯрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИредрдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ
рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг synchronizer.cpp
377 рд▓рд╛рдЗрди рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ ред рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ / рд╕реВрдЪрдирд╛ рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рдлреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬ рдЗрд╕реЗ рдлреБрд▓рд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рд╡реЗ рдЙрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ wait
рдпрд╛ notify
редрдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдЦреБрдж рдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗрдЯ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдореЛрдбрд╝) рдФрд░ рдкрд╛рд░реНрдХ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕рдХреЗ рдЬрд╛рдЧрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ (рд╡рд╣ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛; рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдереА рдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдерд╛)редNotify
рдпрд╣ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗрдЯ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореЙрдирд┐рдЯрд░ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреА рдХрддрд╛рд░ рдореЗрдВ рдХреБрдЫ рдЬрдЧрд╣ рдкрд░ред NotifyAll
рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рднрд┐рдиреНрдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИредрд╕реНрдореГрддрд┐ рдкреНрд░рднрд╛рд╡
рдЬреЗрдПрдордПрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЙрд╕реА рдореЙрдирд┐рдЯрд░ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ ред рдкрддрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреИрд╕ рджреНрд╡рд╛рд░рд╛ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ; рдлреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИOrderAccess::fence();
ред
рдпрджрд┐ рдореЙрдирд┐рдЯрд░ рдкрдХреНрд╖рдкрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрд╛рд░рдВрдЯреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрд░реНрдбрд░ рдореЗрдВ рд╣реИред рдЬрдм рд░рд┐рд╡реЛрдХ рдПрдЪрдмреА рдпрд╛ рддреЛ рдореЛрдирд┐рдЯреЛрд░реЗрдХреНрд╕рд┐рдЯ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╕реНрдЯреНрд░реАрдо рдЬреАрд╡рд┐рдд рдереА (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд▓реА рдпрд╛ рдлреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдпрд╛ рдЬрдм рдкреНрд░рд╡реЗрд╢ (рдЬреЛ рдпрд╛ рддреЛ рдкрддрд▓рд╛ рдпрд╛ рдлреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)редрдПрдЪрдмреА рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдмрд╛рдбрд╝ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдореЗрдЬрд░ рдУред рдЙрд░реНрдлрд╝ рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, tm , рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рдЬреИрд╕рд╛ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм JIT рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдореВрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдЬрдм рд╣рдо рдЕрдиреНрдп рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдИ рднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ "рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдореЗрдВ рджреБрднрд╛рд╖рд┐рдпрд╛" рдХреЗ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рд╣реИредрджреЗрдЦрддреЗ рд░рд╣реЛ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрдореЛрд░реА рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ , рдЬреЛ рдХрд┐ рдЬреЗрдПрдордПрдо рдореЗрдВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ- рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ ред рд╡реЗ volatile
рдЦреЗрддреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ, рдЬреЛ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд╢рди рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдереЗрд╢реЗрдб рдФрд░ рдХреЗрд░реЗрдорд┐рди рдиреЗ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ ( рдХреЗрд╡рд▓ рдзреНрдпрд╛рди рд╕реЗ ) рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдк PrintAssembly рд╕реЗ рднрд░реА рдХрд╣рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЬреЗрдЖрдИрдЯреА рдЖрддрд╛ рд╣реИредрдФрд░ рдПрдХ рдФрд░ рдмрд╛рдд ┬й
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпрд╛рддреНрд░рд╛ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдореИрдВрдиреЗ jdk7u рд╕реЗ 144f8a1a43cb рд╕рдВрд╢реЛрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред рдпрджрд┐ рдЖрдкрдХрд╛ рд╕рдВрд╢реЛрдзрди рдЕрд▓рдЧ рд╣реИ, рддреЛ рд▓рд╛рдЗрди рдирдВрдмрд░ рднреА рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдХреЗ.рдУ.рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдмрд╛рдпрд╕реНрдб рд▓реЙрдХрд┐рдВрдЧ рдЪрд╛рд▓реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди BiasedLockingStartupDelay
рдорд┐рд▓реАрд╕реЗрдХрдВрдб (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 4000) рдХреЗ рдмрд╛рджред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛, рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛, рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЗрдл рдкреЙрдЗрдВрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЬреАрд╡рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдирд┐рд░рдВрддрд░ рд░рд┐рд╡реЛрдХ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИредрд╕рднреА рд╕реЗрдлрдкреЙрдЗрдВрдЯ рдкрд░, рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ ObjectSynchronizer::deflate_idle_monitors
рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдкреБрдХрд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИредрдмрд╣рд╛рджреБрд░ TheShade , artyushov , cheremin рдФрд░ AlexeyTokar рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ (рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдкрдврд╝рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдЬрдирддрд╛ рдХреЛ рдирд╣реАрдВ рд▓рд╛рдКрдВрдЧрд╛, рдкреНрд░рдХрд╛рд╢ рдХреЗ рдмрдЬрд╛рдп, рдХреБрдЫ рдмрдХрд╡рд╛рд╕, рдмреЗрд╡рдХреВрдл рдЪреБрдЯрдХреБрд▓реЗ рдФрд░ рдЕрдлрд╡рд╛рд╣реЛрдВ рд╕реЗ рднрд░рд╛ рд╣реБрдЖред