JVM рдореЗрдВ рд╕рдВрдХрд▓рди рдкреНрд░рдХрд╛рд░: рдПрдХреНрд╕рдкреЛрдЬрд╝рд┐рдВрдЧ рдмреНрд▓реИрдХ рдореИрдЬрд┐рдХ рд╕рддреНрд░

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

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

рдЕрдЪреНрдЫрд╛ рдкрдврд╝ рд▓реЛ!

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

рдЖрдк рд╢рд╛рдпрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ ("рдЬреЗрд╡рд╛рдХ" рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЬрд╛рд╡рд╛ рд╕реНрд░реЛрдд рдХреЛрдб (ред рдЬрд╛рд╡рд╛ рдлрд╛рдЗрд▓реЛрдВ) рдХреЛ рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб (.рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓реЛрдВ) рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рднрд╛рд╖рд╛ рд╣реИред рдЗрд╕реЗ "рдордзреНрдпрд╡рд░реНрддреА" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ (рд╕реАрдкреАрдпреВ) рджреНрд╡рд╛рд░рд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд "рдореВрд▓" рдорд╢реАрди рдХреЛрдб рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдХреНрд░рдордгрдХрд╛рд▓реАрди рд░реВрдк рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 3 рддрд░реАрдХреЗ рд╣реИрдВ:

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

рддреЛ, (1) рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдХрд╛рдо рд╣реИ, (2) JIT рд╕рдВрдХрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ (3) AOT рд╕рдВрдХрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЪреМрдерд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ - рд╕реАрдзреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ рдореЗрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдореЗрдВред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ "рдЬрд╛рд╡рд╛" (1) рдЬреЗрдЖрдИрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ / рдпрд╛ (3) рдПрдУрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░ - (рдХрдм) рдХреЗ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, "рдЬрд╛рд╡рд╛" рджреЛрдиреЛрдВ (1) рдФрд░ (2) рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ 9 рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛, рдПрдХ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╕рдВрднрд╡ рд╣реИред

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реА Test рдХреНрд▓рд╛рд╕ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 public class Test { public int f() throws Exception { int a = 5; return a; } public static void main(String[] args) throws Exception { for (int i = 1; i <= 10; i++) { System.out.println("call " + Integer.valueOf(i)); long a = System.nanoTime(); new Test().f(); long b = System.nanoTime(); System.out.println("elapsed= " + (ba)); } } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ main рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ Test рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рддреБрд░рдВрдд рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ 10 рдмрд╛рд░ f рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪрдХреНрд░реАрдп рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рддреА рд╣реИред f рдлрд╝рдВрдХреНрд╢рди рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

 call 1 elapsed= 5373 call 2 elapsed= 913 call 3 elapsed= 654 call 4 elapsed= 623 call 5 elapsed= 680 call 6 elapsed= 710 call 7 elapsed= 728 call 8 elapsed= 699 call 9 elapsed= 853 call 10 elapsed= 645 

рдФрд░ рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: рдХреНрдпрд╛ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ "рдЬрд╛рд╡рд╛" рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡рд┐рдХрд▓реНрдк (1), "рдЬрд╛рд╡рд╛" рдПрдХ рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рдХрд▓реНрдк (2) рд╣реИ рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдПрдУрдЯреА рд╕рдВрдХрд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ , рд╡рд╣ рд╣реИ, рд╡рд┐рдХрд▓реНрдк (3)? рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрди рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рд╣реА рдЬрд╡рд╛рдм рдЦреЛрдЬрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

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

  • рдЬрд╛рд╡рд╛ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, -XX:CompileThreshold=invocations рд╡рд┐рдХрд▓реНрдк рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ -XX:CompileThreshold=invocations рдХреНрд▓рд╛рдЗрдВрдЯ JVM рдкрд░ invocations=1500 (рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ JVM рдкрд░ рдЕрдзрд┐рдХ) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ 10 рдмрд╛рд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдФрд░ 10 <1500, рд╣рдо рдпрд╣рд╛рдВ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдХрд▓рди рдХрджрдо рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ (рдЕрдзрд┐рдХрддрдо) рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕рдХреЗ рдиреАрдЪреЗ рдирд┐рд╡рд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
  • рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдерд╛ред рдореИрдВ рдиреАрдЪреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рднреА рд╕рдордЭрд╛рдКрдВрдЧрд╛ред

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

рдпрджрд┐ рдЖрдк "java" рдХреЛ -XX:PrintCompilation , рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдПрдХ рд▓рд╛рдЗрди рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рди рдЕрд▓рдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рдпрдЯреЗрдХреЛрдб (рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реИрдВ) рдореЗрдВ рдмрдиреЗ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ред ред

рдиреАрдЪреЗ рдореИрдВ -Xbatch рд╡рд┐рдХрд▓реНрдк рднреА рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред -Xbatch рд╡рд┐рдХрд▓реНрдк -Xbatch рдЬрд░реВрд░рдд рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ; рдЕрдиреНрдпрдерд╛, JIT рд╕рдВрдХрд▓рди рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд░реВрдк рд╕реЗ (рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде) рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рдЖрдЙрдЯрдкреБрдЯ рдХрднреА-рдХрднреА рд░рдирдЯрд╛рдЗрдо ( -XX:PrintCompilation рдХрд╛рд░рдг) рдкрд░ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, тАУXbatch рд╡рд┐рдХрд▓реНрдк рдкреГрд╖реНрдарднреВрдорд┐ рд╕рдВрдХрд▓рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, JIT рд╕рдВрдХрд▓рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

(рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦреВрдВрдЧрд╛)

 $ java -client -Xbatch -XX:+PrintCompilation Test 

рдореИрдВ рдпрд╣рд╛рдВ рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдбрд╛рд▓реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ JVM рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛, рд╕реВрд░рдЬ, jdk рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд) рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛрдЧрд╛ - рдЗрд╕рд▓рд┐рдП, рдореЗрд░реА рд╕реНрдХреНрд░реАрди рдкрд░, рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ 274 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ , рдФрд░ рдХреБрдЫ рдФрд░ - рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╣реБрдд рдирд┐рд╖реНрдХрд░реНрд╖ рддрдХ)ред рдЗрд╕ рд╢реЛрдз рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдВрддрд░рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП JIT рд╕рдВрдХрд▓рди рдХреЛ рд░рджреНрдж рдХрд░ рджреВрдВрдЧрд╛ рдпрд╛ рдЪреБрдирд┐рдВрджрд╛ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рддрд░реАрдХреЗ ( Test.f ) рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо Test.f ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, -XX:CompileCommand ред рдЖрдк рдХрдИ рдХрдорд╛рдВрдб (рд╕рдВрдХрд▓рди) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ -XX:CompileCommandFile рд╡рд┐рдХрд▓реНрдк рд╣реИ -XX:CompileCommandFile ред рдЗрд╕рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдореИрдВ рдЗрд╕реЗ hotspot_compiler рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ hotspot_compiler рдХрд┐ рдореИрдВ рд╢реАрдШреНрд░ рд╣реА hotspot_compiler рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреВрдВрдЧрд╛:

 quiet exclude java/* * exclude jdk/* * exclude sun/* * 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ (рдЕрдВрддрд┐рдо *) рдХреЛ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЬрд╛рд╡рд╛, рдЬреЗрдбрдбреА рдФрд░ рд╕реВрд░рдЬ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ (рдкреИрдХреЗрдЬ рдХреЗ рдирд╛рдо / рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк * рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред quiet рдХрдорд╛рдВрдб JVM рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд╡рд░реНрдЬрд┐рдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЬреЛ рдЕрдм рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВ рд╡реЗ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдВрдЧреЗред рддреЛ, рдореИрдВ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ:

 java -client -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler Test 

рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдо hotspot_compiler рд░рдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ (рдореИрдВрдиреЗ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛) рдХрд┐ Oracle JDK рдореЗрдВ .hotspot_compiler рдирд╛рдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реИред

рддреЛ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ:

 many lines like this 111 1 n 0 java.lang.invoke.MethodHandle::linkToStatic(LLLLLL)L (native) (static) call 1 some more lines like this 161 48 n 0 java.lang.invoke.MethodHandle::linkToStatic(ILIJL)I (native) (static) elapsed= 7558 call 2 elapsed= 1532 call 3 elapsed= 920 call 4 elapsed= 732 call 5 elapsed= 774 call 6 elapsed= 815 call 7 elapsed= 767 call 8 elapsed= 765 call 9 elapsed= 757 call 10 elapsed= 868 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреБрдЫ java.lang.invoke.MethodHandler. рд╡рд┐рдзрд┐рдпрд╛рдВ рдЕрднреА рднреА рдХреНрдпреЛрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВ java.lang.invoke.MethodHandler. рд╢рд╛рдпрдж, рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдордЭрд╛ рдХрд┐ рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ, рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рднреА рд╕рдВрдХрд▓рди рдЪрд░рдг (рдкрд╣рд▓реЗ 274 рд▓рд╛рдЗрдиреЗрдВ рдереАрдВ) рдЕрдм рдЧрд╛рдпрдм рд╣реЛ рдЧрдП рд╣реИрдВред рдЖрдЧреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВ java.lang.invoke.MethodHandler рдХреЛ рд╕рдВрдХрд▓рди рд▓реЙрдЧ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рднреА рд╣рдЯрд╛ рджреВрдВрдЧрд╛ред

рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдЖрдП рд╣реИрдВред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдХреЛрдб рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо 10 рдмрд╛рд░ рдЕрдкрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рд╣реИ, рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рд╣рдо рдЗрд╕реЗ рд▓реЙрдЧ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ (рдЙрд╕реА рд╕рдордп, рд╣рдо рдЗрд╕реЗ рд╕рдВрдХрд▓рди рд▓реЙрдЧ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рди рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рд╣реИ)ред рдареАрдХ рд╣реИ, рдЖрдкрдиреЗ рд╕рд┐рд░реНрдл "рдЬрд╛рд╡рд╛" рдЙрдкрдХрд░рдг рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрд╛, рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдФрд░ рдХреЗрд╡рд▓ 100% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреАред рддреЛ, рд╣рдо рдЙрд╕ рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдХрд▓реНрдк (1) рдХреЗ рд╕рд╛рде рд▓рдЧрд╛ рд╣реИред рд╣рдо (2), рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдХрд▓рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ 1,500 рдмрд╛рд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рди рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк -XX:CompileThreshold=invocations рдХреЙрд▓ -XX:CompileThreshold=invocations рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -XX:CompileThreshold=invocations , 1500 рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВред рдЖрдЗрдП рд╣рдо рдпрд╣рд╛рдВ рдкрд░ 5. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдЪ рдХреЗ 5 "рд╡реНрдпрд╛рдЦреНрдпрд╛" рдХреЗ рдмрд╛рдж, рдЬреЗрд╡реАрдПрдо рдХреЛ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред
java -client -Xbatch

 -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler -XX:CompileThreshold=5 Test 

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

 java -client -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler -XX:CompileThreshold=5 -XX:-TieredCompilation Test 

рдпрд╣рд╛рдБ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ (рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдореИрдВрдиреЗ java.lang.invoke.MethodHandle рдмрд╛рд░реЗ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рдпрд╛рдж рдХреА java.lang.invoke.MethodHandle ):

 call 1 elapsed= 9411 call 2 elapsed= 1291 call 3 elapsed= 862 call 4 elapsed= 1023 call 5 227 56 b Test::<init> (5 bytes) 228 57 b Test::f (4 bytes) elapsed= 1051739 call 6 elapsed= 18516 call 7 elapsed= 940 call 8 elapsed= 769 call 9 elapsed= 855 call 10 elapsed= 838 

рд╣рдо рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ (рд╣реИрд▓реЛ!) рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдлрд╝рдВрдХреНрд╢рди Test.f рдпрд╛ Test::<init> рдирдВрдмрд░ 5 рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ CompileThreshold рдХреЛ 5 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред JVM 5 рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рддреЗрдЬрд╝реА рд╕реЗ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╖рдп рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рдПрдХ рдФрд░ рд╕рдорд╛рд░реЛрд╣ рдпрд╣рд╛рдБ рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ Test::<init> , рдЬреЛ Test рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдХреЛрдб рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдирдП Test() ) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рднреА f рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ f рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдХрдореНрдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИ, рдареАрдХ 5 рдХреЙрд▓ рдХреЗ рдмрд╛рджред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╡рд┐рдХрд▓реНрдк (2), рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рди рдХреА рдЪрд░реНрдЪрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рдЬреЗрд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рдкрд╛рдВрдЪ рдЧреБрдирд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдмрд╛рдж рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ JIT рд╕рдВрдХрд▓рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╡рд┐рдХрд▓реНрдк -XX:+PrintAssembly ред рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг (рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг = рджреЗрд╢реА рдорд╢реАрди рдХреЛрдб = рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб) рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрде рдореЗрдВ рдХреЛрдИ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рд╣реЛред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреЗрд╡реАрдПрдо рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо hsdis рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдУрдкрдирдЬреЗрдбрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ред Hsdis рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдпрд╛ рдЗрд╕рдХреА рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЧрд╣реЛрдВ рдкрд░ рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдФрд░ JAVA_HOME/lib/server рдореЗрдВ hsdis-amd64.so рдбрд╛рд▓рд╛ред

рддреЛ рдЕрдм рд╣рдо рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореБрдЭреЗ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ -XX:+PrintAssembly рднреА -XX:+UnlockDiagnosticVMOptions рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ -XX:+UnlockDiagnosticVMOptions , рдФрд░ рдЗрд╕реЗ PrintAssembly рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ JVM рдЖрдкрдХреЛ PrintAssembly рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА PrintAssembly ред рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

 java -client -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler -XX:CompileThreshold=5 -XX:-TieredCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly Test 

рдЖрдЙрдЯрдкреБрдЯ рд▓рдВрдмрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрдВрдЧреА:

 0x00007f4b7cab1120: mov 0x8(%rsi),%r10d 0x00007f4b7cab1124: shl $0x3,%r10 0x00007f4b7cab1128: cmp %r10,%rax 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдореВрд▓ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдХрд▓реНрдк 3, рдПрдУрдЯреА рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВред рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдХрд▓рди, рдПрдУрдЯреА, рд╕рдВрд╕реНрдХрд░рдг 9 рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛ред

JDK 9, jaotc рдореЗрдВ рдПрдХ рдирдпрд╛ рдЯреВрд▓ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП AOT рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ: рдЬрд╛рд╡рд╛ "рдЬрд╛рд╡рд╛" рдХрдВрдкрд╛рдЗрд▓рд░, рдлрд┐рд░ рдПрдУрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░ рдЬрд╛рд╡рд╛ "рдЬреЙрдЯрдХ" рдХреЗ рд▓рд┐рдП рдФрд░ рдлрд┐рд░ рдЬреЗрд╡реАрдПрдо "рдЬрд╛рд╡рд╛" рдХреЛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЪрд▓рд╛рдПрдВред рдЬреЗрд╡реАрдПрдо рдЖрдо рддреМрд░ рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдУрдЯреА-рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рд╣реИ, рддреЛ рдпрд╣ рд╕реАрдзреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпрд╛ рдЬреЗрдЖрдИрдЯреА рд╕рдВрдХрд▓рди рдХрд╛ рд╕рд╣рд╛рд░рд╛ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдордЭрд╛рдПрдВ: рдЖрдкрдХреЛ рдПрдУрдЯреА рд╕рдВрдХрд▓рдХ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдЗрдП Test::f рдПрдУрдЯреА-рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдПрдВред рдордд рднреВрд▓реЛ: рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 150+ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ JDK 9 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

 jaotc --output=libTest.so Test.class 

рдирддреАрдЬрддрди, libTest.so рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд┐рд╕рдореЗрдВ Test рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ libTest.so -рд╕рдВрдХрд▓рд┐рдд рджреЗрд╢реА рдХреЛрдб рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдк рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 nm libTest.so 

рд╣рдорд╛рд░реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрдВрдЧреЗ:

 0000000000002120 t Test.f()I 00000000000021a0 t Test.<init>()V 00000000000020a0 t Test.main([Ljava/lang/String;)V 

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рд░реНрдп, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, f , рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ main рдкреБрд╕реНрддрдХрд╛рд▓рдп libTest.so рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд "рдЬрд╛рд╡рд╛" рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП jaotc рдХреЗ рд▓рд┐рдП -compile- рдХрдорд╛рдВрдб рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЬреЗрдИрдкреА 295 рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

рдЪрд▓реЛ рдЕрдм "рдЬрд╛рд╡рд╛" рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ AOT- рд╕рдВрдХрд▓рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ "рдЬрд╛рд╡рд╛" рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдУрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, -XX:AOTLibrary рд╡рд┐рдХрд▓реНрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 java -XX:AOTLibrary=./libTest.so Test 

рдЖрдк рдХрдИ рдПрдУрдЯреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ, рдЬрдм AOTLibrary рдмрд┐рдирд╛ "рдЬрд╛рд╡рд╛" рд╢реБрд░реВ AOTLibrary , рдХреНрдпреЛрдВрдХрд┐ рдЯреЗрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ AOT- рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдПрдХ рдФрд░ рдирдпрд╛ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, -XX:+PrintAOT ред

 java -XX:AOTLibrary=./libTest.so -XX:+PrintAOT Test 

Test рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрджреЗрд╢ рдирд┐рдореНрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

  9 1 loaded ./libTest.so aot library 99 1 aot[ 1] Test.main([Ljava/lang/String;)V 99 2 aot[ 1] Test.f()I 99 3 aot[ 1] Test.<init>()V 

рдЬреИрд╕рд╛ рдХрд┐ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдПрдУрдЯреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рднрд░реА рд╣реБрдИ рд╣реИ, рдФрд░ рдПрдУрдЯреА-рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ JIT рд╕рдВрдХрд▓рди рд╣реЛ рд░рд╣рд╛ рд╣реИред

 java -client -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler -XX:CompileThreshold=5 -XX:-TieredCompilation -XX:AOTLibrary=./libTest.so -XX:+PrintAOT Test 

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

рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: рдпрджрд┐ рд╣рдо рдПрдХ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреЗрд╡реАрдПрдо рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдХреЛрдб рдЕрдкреНрд░рдЪрд▓рд┐рдд / рдмрд╛рд╕реА рд╣реИ? рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЪрд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдП рдХреЛ 6 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

 public int f() throws Exception { int a = 6; return a; } 

рдореИрдВрдиреЗ рдпрд╣ рд╕рд┐рд░реНрдл рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред рдЕрдм рд╣рдо javac рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдКрдкрд░ рдХреЗ рд╕рдорд╛рди рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВред

 javac Test.java java -client -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler -XX:CompileThreshold=5 -XX:-TieredCompilation -XX:AOTLibrary=./libTest.so -XX:+PrintAOT Test 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ "javac" рдХреЗ рдмрд╛рдж "jaotc" рдирд╣реАрдВ рдЪрд▓рд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП AOT рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдХреЛрдб рдЕрдм рдкреБрд░рд╛рдирд╛ рдФрд░ рдЧрд▓рдд рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди f рдореЗрдВ a = 5 рд╣реИред

рдКрдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд "рдЬрд╛рд╡рд╛" рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ:

 228 56 b Test::<init> (5 bytes) 229 57 b Test::f (5 bytes) 

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд░рд▓ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛рдиреЗ рдФрд░ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреИрд╕реЗ JVM рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ (JIT) рдпрд╛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ (AOT) - рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдВрддрд┐рдо рдЕрд╡рд╕рд░ рдХреЗрд╡рд▓ JKK 9 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рд╕реАрдЦрд╛ рд╣реИ рдирдИред

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


All Articles