рдмрд╣реБрдд рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рд▓реЗрдЦ рдкрдврд╝рд╛:
рд╕реА рдФрд░ рд╕реА ++ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдк рдФрд░
рд╡рд┐рдХрд╛рд╕ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рд╕реА рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ ред рд╡реЗ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЖрдЗрдП рдХреБрдЫ рд╕рдорд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд░рдирдЯрд╛рдЗрдо рд╕рд┐рд╕реНрдЯрдо, рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЖрдкрдХреЛ рдордХреНрдЦреА рдкрд░ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ - рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд░реИрдЦрд┐рдХ рдЦреЛрдЬред рдореИрдВ C / C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рддреБрд▓рдиреАрдп рд░рдирдЯрд╛рдЗрдо рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рд╣рдорд╛рд░реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ
рд▓реЛрдВрдЧ рдФрд░ рдПрдХ рд░реИрдкрд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИ:
CashAccountRow ред
рдЕрдиреНрдп рд╕рднреА рдпрд╛рдВрддреНрд░рд┐рдХреА
рдХреИрд╢рдЕрдХрд╛рдЙрдВрдЯрд╕реНрдЯреЛрд░ рд╡рд░реНрдЧ рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВред
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рднрд░реЗрдВред CashAccountFinder рдПрдХ рдЖрджрд┐рдо DSL рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рдзреЗрдп рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдордХреНрдЦреА рдкрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд┐рдП рдмрд┐рдирд╛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрд▓рдирд╛ рджреА рдЬрд╛рддреА рд╣реИ, рд╡рд┐рдзреЗрдп рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдбрдЧреЗрдЯрд░ рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИред
рд╕рдВрдХрд▓рдирдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдореИрдк рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЪрдпрдирд╛рддреНрдордХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдмрд┐рдирд╛ рдЦреЛрдЬреЗрдВ:
public final int find(final CashAccountFinder finder) { int rValue = 0; CashAccountRow c = new CashAccountRow(); finder.compileList(); for(int i = 0; i < ROW_COUNT; ++i) { if(finder.isMatched(c.setBitStorage(accountRows[i]))) { ++rValue; } } return rValue; }
рдордХреНрдЦреА рдкрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
Javassist рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Find2 рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдмрдирддрд╛ рд╣реИ:
public final int find2(final CashAccountFinder finder) throws Throwable{ finder.compileList(); StringBuilder cname = new StringBuilder(); for(CashAccountFinder.PredicateHolder p: finder.predicateHolderArray) { cname.append(p.field.toString()); }
рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рд╕реЗрдЯ рдФрд░ рд╡рд┐рдзреЗрдп рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
if(classMapper.containsKey(cname.toString())) { matcherBase = classMapper.get(cname.toString()); }
рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИ:
рдЦреЛрдЬ:
CashAccountRow c = new CashAccountRow(); int rValue = 0; for(int i = 0; i < ROW_COUNT; ++i) { if(matcherBase.c(c.setBitStorage(accountRows[i]))) { ++rValue; } }
рдореБрдЦреНрдп рд░реВрдк рд╕реЗ, рдЦреЛрдЬ рдХреЛ 2 рдмрд╛рд░ рдЪрд▓рд╛рдПрдВред рдкрд╣рд▓рд╛ рд▓реЙрдиреНрдЪ "рд╡рд╛рд░реНрдорд┐рдВрдЧ рдЕрдк" рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЬреАрдЯ рдФрд░ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХрд╛рдо рд╣реЛред
System.out.println("Warming up..."); store.find2(finder); System.out.println("Running benchmark..."); long millis = System.currentTimeMillis(); int i = store.find2(finder); long endMillis = System.currentTimeMillis();
JVM:
рдЬрд╛рд╡рд╛ рд╕рдВрд╕реНрдХрд░рдг "1.7.0_21"
рдЬрд╛рд╡рд╛ (TM) рдПрд╕рдИ рд░рдирдЯрд╛рдЗрдо рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ (рдмрд┐рд▓реНрдб 1.7.0_21-b11)
рдЬрд╛рд╡рд╛ рд╣реЙрдЯрд╕реНрдкреЙрдЯ (рдЯреАрдПрдо) 64-рдмрд┐рдЯ рд╕рд░реНрд╡рд░ рд╡реАрдПрдо (23.21-b01, рдорд┐рд╢реНрд░рд┐рдд рдореЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг)
рдХреЛрд░ I5-2500k 3.3GHz рдкрд░ рд▓реЙрдиреНрдЪ рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
рдЧрд░реНрдо рд╣реЛ рд░рд╣рд╛ рд╣реИ ...
рдЙрддреНрдкрдиреНрди рдХреЛрдб:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓рд┐рдпрди c (рдЙрджрд╛рд╣рд░рдг.data.CashAccountRow r) {рд╡рд╛рдкрд╕реА r.getAmount ()> = 0 && r.getAmount () <= 0 && r.getHeight ()>> 0 && r.getHeight () <= 0 && r .getGender ()> = 0 && r.getGender () <= 0 && рд╕рддреНрдп; }
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ ...
рдорд┐рд▓рд╛рди рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛: 38
рдмреАрддрд╛ рд╕рдордп: 18ms
рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА: 81 рдПрдордмреА
рдЙрд╕реА рдорд╢реАрди рдкрд░ рдкрд╣рд▓реЗ рд▓реЗрдЦ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
рдЙрддреНрдкрдиреНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 10,000,000
C ++ - рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИ ...
C ++ - рдЕрдиреБрдХреВрд▓рд┐рдд рдЦреЛрдЬ рдореЗрдВ 0.039000 рд╕реЗрдХрдВрдб рд▓рдЧреЗред
рдорд┐рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 38
рд╕реА-рд╕рд░реНрдЪрд┐рдВрдЧ ...
рд╕реА-рд╕рд░реНрдЪ рдореЗрдВ 0.053000 рд╕реЗрдХрдВрдб рд▓рдЧреЗред
C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ C ++ рддреЗрдЬ: 1.358974 рдмрд╛рд░
рдорд┐рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 38
рдЙрд╕реА рдорд╢реАрди рдкрд░ рджреВрд╕рд░реЗ рд▓реЗрдЦ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
рдЙрддреНрдкрдиреНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 10,000,000
C ++ - рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИ ...
C ++ - рдЕрдиреБрдХреВрд▓рд┐рдд рдЦреЛрдЬ рдореЗрдВ 0.012000 рд╕реЗрдХрдВрдб рд▓рдЧреЗ
рдорд┐рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 38
рд╕реА-рд╕рд░реНрдЪрд┐рдВрдЧ ...
рд╕реА-рд╕рд░реНрдЪ рдореЗрдВ 0.051000 рд╕реЗрдХрдВрдб рд▓рдЧреЗред
C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ C ++ рддреЗрдЬ: 4.250000 рдмрд╛рд░
рдорд┐рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 38
рд▓рдЧрднрдЧ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реА ++ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдлреНрд▓рд╢ред рдХреЛрдб
GitHub.com рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред