lnlining 方法内联
int addAll(int max) { int accum = 0; for(int i=0;i<max;i++) accum = add(accum,i); return accum; } int add(int a,int b){ return a+b; }
int addAll(int max) { int accum = 0; for(int i=0;i<max;i++) accum = accum+i; return accum; }
Loop unrolling
private static final String[] options = {"A","B","C"}; void lopper(){ for(String option : options){ process(option); } } void process(String option) { System.out.println(option); }
private static final String[] options = {"A","B","C"}; void lopper(){ System.out.println(options[0]); System.out.println(options[1]); System.out.println(options[2]); }
https://en.wikipedia.org/wiki/Loop_unrollin g
lock coarsening 锁粗化
public void needsLocks(){ for(String option:options){ process(option); } } synchronized void process(String option) { // code }
public void needsLocks(){ synchronized (this) { for (String option : options) { // code } } }
将多个连续的加锁减锁,合并为一个
Lock Eliding 锁消除
public void overCautious(){ List I = new ArrayList(); synchronized (I) { for (String option : options) { // code } } }
it never escapes this thread...删除不必要的加锁操作
public void overCautious(){ List I = new ArrayList(); for (String option : options) { // code } }
Escape Analysis 逃逸分析
@AllArgsConstructor class Foo{ public final String a; public final String b; } public void bar(){ Foo f = new Foo("hello","jvm"); baz(f); } public void baz(Foo f){ System.out.println(f.a); System.out.println(","); quux(f); } public void quux(Foo f){ System.out.println(f.b); System.out.println("!"); }
https://blog.youkuaiyun.com/qq_33915826/article/details/79950890
public void inlined(){ System.out.println("hello"); System.out.println(","); System.out.println("jvm"); System.out.println("!"); }
JIT
c2 Compiler
Profile to find 'hot spots';
10k calls;