рдЕрдЬреАрдм рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛

рдкрд░рд┐рдЪрдп


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

рддреНрдпрд╛рдЧ


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

рдЙрдкрдХрд░рдг


рдЪрд▓реЛ рдореБрдЦреНрдп рдмрд╛рдд рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рд╕рднреА рдорд╛рдк рдХреИрд╕реЗ рдХрд┐рдП рдЧрдП рдереЗред рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ASM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реНрд╡рдпрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП - JMH ред

рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
public interface Getter { int get(); } 


рдЕрдЧрд▓рд╛, рдПрдХ рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
  public get()I NOP ... NOP LDC 20 IRETURN 

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

рдкреВрд░реНрдг рдЬрдирд░реЗрдЯрд░ рдХреЛрдб
 public class SimpleGetterClassLoader extends ClassLoader { private static final String GENERATED_CLASS_NAME = "other.GeneratedClass"; private static final ClassLoader myClassLoader = new SimpleGetterClassLoader(); @SuppressWarnings("unchecked") public static Getter newInstanceWithNOPs(int nopCount) throws Exception { Class<?> clazz = Class.forName(GENERATED_CLASS_NAME + "_" + nopCount, false, myClassLoader); return (Getter) clazz.newInstance(); } @NotNull @Override protected Class<?> findClass(@NotNull String name) throws ClassNotFoundException { if (!name.startsWith(GENERATED_CLASS_NAME)) throw new ClassNotFoundException(name); int nopCount = Integer.parseInt(name.substring(GENERATED_CLASS_NAME.length() + 1)); ClassWriter cw = new ClassWriter(0); cw.visit(V1_5, ACC_PUBLIC, name.replace('.', '/'), null, getInternalName(Object.class), new String[]{getInternalName(Getter.class)}); { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, getInternalName(Object.class), "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "get", "()I", null, null); mv.visitCode(); for (int i = 0; i < nopCount; i++) { mv.visitInsn(NOP); } mv.visitLdcInsn(20); mv.visitInsn(IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } cw.visitEnd(); byte[] bytes = cw.toByteArray(); return defineClass(name, bytes, 0, bytes.length); } } 


рдмреЗрдВрдЪрдорд╛рд░реНрдХ
 @State(Scope.Benchmark) @OutputTimeUnit(TimeUnit.MICROSECONDS) public class Bench { private Getter nop_0; private Getter nop_10; ... @Setup public void setup() throws Exception { nop_0 = newInstanceWithNOPs(0); nop_10 = newInstanceWithNOPs(10); ... } @GenerateMicroBenchmark public int nop_0() { return nop_0.get(); } @GenerateMicroBenchmark public int nop_10() { return nop_10.get(); } ... 



рд╕рддреНрдп рдХреА рдЦреЛрдЬ


рдкрд╣рд▓реЗ 2 рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдереЗ: рдмрд┐рдирд╛ knobs рдФрд░ 2000 рдХреЗ рдмрд╛рдж рд╕реЗред

 Benchmark Mode Samples Mean Mean error Units b.Bench.nop_0 thrpt 5 838,753 48,962 ops/us b.Bench.nop_2000 thrpt 5 298,428 7,965 ops/us 

рдФрд░ рддреБрд░рдВрдд, рдореИрдВрдиреЗ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛: "рдмреЗрд╡рдХреВрдл рдЬреЗрдЖрдИрдЯреА рдкреИрд░ рдирд╣реАрдВ рдХрд╛рдЯрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдорд╢реАрди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред"
рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рд╕рд╡рд╛рд▓:
рдпрджрд┐ рдпрд╣ рд╕рдЪ рдерд╛, рддреЛ рдХреНрдпрд╛ рдорд╛рдк рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛? рдпрд╛ рд╡рд╣рд╛рдБ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛?

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

рддрдм рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
 Benchmark Mode Samples Mean Mean error Units b.Bench.nop_0 thrpt 5 813,010 71,510 ops/us b.Bench.nop_2000 thrpt 5 302,589 12,360 ops/us b.Bench.nop_10000 thrpt 5 0,268 0,017 ops/us 

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдЬреНрдЮрд╛рди
рдпрд╣ рдорд╛рдк рдЖрдо рддреМрд░ рдкрд░ рднрд╡реНрдп рд╣реИред 3 рдЕрдВрдХ, рдФрд░ рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рджреГрд╢реНрдпреЛрдВ рд╕реЗред

рдпрд╣ рдЕрд▓рдЧ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рдирдП рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рдЪрд╛рд╣реЗ рд╕рдВрдХрд▓рди рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджреЗрдЦрд╛ред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ 0 / 2k рдкрд░ рд╕рдорд╛рди рд╣реИред рдЬреЛ рдПрдХ рдЧрд▓рддреА рдереАред

рдореИрдВрдиреЗ рдЗрд╕реЗ рджреЗрдЦрд╛, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреВрд░рдЧрд╛рдореА рдирд┐рд╖реНрдХрд░реНрд╖ рдмрдирд╛рдпрд╛: "рдирд┐рд░реНрднрд░рддрд╛ рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдЧреИрд░-рд░реИрдЦрд┐рдХ рд╣реИред" рд▓реЗрдХрд┐рди, рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реЛрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдЕрд╕рд▓реА рдЪреАрдЬ рдЦреБрдж рдЧрд╛рдВрдареЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИред

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


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧрд▓рддрдлрд╣рдореА рд╕реЗ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рдУрдкрдЬрдВрдХ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛:
  develop(intx, HugeMethodLimit, 8000, \ "Don't compile methods larger than this if " \ "+DontCompileHugeMethods") 

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╕рд┐рд░реНрдл 2k рдФрд░ 10k рдХреЗ рдмреАрдЪред рдЖрдЗрдП рдореЗрд░реА рд╡рд┐рдзрд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ: "рд╡рд╛рдкрд╕реА 20" рдкрд░ 3 рдмрд╛рдЗрдЯреНрд╕, 7997 рдЕрд╡рд╢реЗрд╖ред
 Benchmark Mode Samples Mean Mean error Units b.Bench.nop_0 thrpt 5 797,376 12,998 ops/us b.Bench.nop_2000 thrpt 5 306,795 0,243 ops/us b.Bench.nop_7997 thrpt 5 303,314 7,161 ops/us b.Bench.nop_7998 thrpt 5 0,335 0,001 ops/us b.Bench.nop_10000 thrpt 5 0,269 0,000 ops/us 

рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛, рдпрд╣ рд╕реАрдорд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдХрд┐ 8000 рдмрд╛рдЗрдЯ рддрдХ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдЕрдВрдХ рдЬреЛрдбрд╝реЗрдВ:
 Benchmark Mode Samples Mean Mean error Units b.Bench.nop_0 thrpt 5 853,499 61,847 ops/us b.Bench.nop_10 thrpt 5 845,861 112,504 ops/us b.Bench.nop_100 thrpt 5 867,068 20,681 ops/us b.Bench.nop_500 thrpt 5 304,116 1,665 ops/us b.Bench.nop_1000 thrpt 5 299,295 8,745 ops/us b.Bench.nop_2000 thrpt 5 306,495 0,578 ops/us b.Bench.nop_7997 thrpt 5 301,322 7,992 ops/us b.Bench.nop_7998 thrpt 5 0,335 0,005 ops/us b.Bench.nop_10000 thrpt 5 0,269 0,004 ops/us b.Bench.nop_25000 thrpt 5 0,105 0,007 ops/us b.Bench.nop_50000 thrpt 5 0,053 0,001 ops/us 

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

рдЕрдЧрд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдВрдЦ рдкрд░ рдкрдбрд╝рддреА рд╣реИ рд╡рд╣ рдПрдХ рдордЬрдмреВрдд рднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ 8k рддрдХ рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рддрд░рд╣ рдХреА рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл 2 рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВред рдореИрдиреБрдЕрд▓ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХрд╛ рдПрдХ рдФрд░ 5 рдорд┐рдирдЯ, рдФрд░ рд╕реАрдорд╛ рдорд┐рд▓рддреА рд╣реИред
 Benchmark Mode Samples Mean Mean error Units b.Bench.nop_0 thrpt 5 805,466 10,074 ops/us b.Bench.nop_10 thrpt 5 862,027 4,756 ops/us b.Bench.nop_100 thrpt 5 861,462 9,881 ops/us b.Bench.nop_322 thrpt 5 863,176 22,385 ops/us b.Bench.nop_323 thrpt 5 303,677 5,130 ops/us b.Bench.nop_500 thrpt 5 299,368 11,143 ops/us b.Bench.nop_1000 thrpt 5 302,884 3,373 ops/us b.Bench.nop_2000 thrpt 5 306,682 3,598 ops/us b.Bench.nop_7997 thrpt 5 301,457 4,209 ops/us b.Bench.nop_7998 thrpt 5 0,337 0,001 ops/us b.Bench.nop_10000 thrpt 5 0,268 0,004 ops/us b.Bench.nop_25000 thrpt 5 0,107 0,002 ops/us b.Bench.nop_50000 thrpt 5 0,053 0,000 ops/us 

рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХреА рд╕реАрдорд╛ рд╣реИред рдЖрдЗрдП рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ: 3 + 322 == 325ред рд╣рдо рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдЬрд╛рджреВ 325 рд╣реИ, рдФрд░ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреБрдВрдЬреА -XX рдкрд╛рддреЗ рд╣реИрдВ: FreqInlineSize
FreqInlineSize рдЖрдзреБрдирд┐рдХ 64 рдмрд┐рдЯ рд▓рд┐рдирдХреНрд╕ рдкрд░ 325 рд╣реИ

рдФрд░ рдбреЙрдХ рд╕реЗ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг:
рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрдВрдЯреЗрдЧрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯрдХреЛрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред


рд╣реБрд░реНрд░реЗ! рдЕрдВрдд рдореЗрдВ, рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЖрдпрд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдорд┐рд▓реА (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, "рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬреЗрдВ рд╕рдорд╛рди рд╣реИрдВ")ред
1. JIT + рдЗрдирд▓рд╛рдЗрди
2. рдЬреЗрдЖрдИрдЯреА
3. рдИрдорд╛рдирджрд╛рд░ рд╡реНрдпрд╛рдЦреНрдпрд╛

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


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

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдкреЛрд╕реНрдЯ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреАред

рдкреБрдирд╢реНрдЪ


рд╣рд░ рд╕рдордп рдореИрдВрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ 8000 рдФрд░ 325 рджреЛрдиреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рд╕рдорд╛рд╡реЗрд╢реА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХрд╛ рдкреНрд░рд╢реНрди рей
рдЖрдЦрд┐рд░ 325 рдФрд░ 8000 рд╣реА рдХреНрдпреЛрдВ? рдХреНрдпрд╛ рдпреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВ, рдпрд╛ рдЙрдирдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рд╣реИ?

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


All Articles