hz90 / java-base-knowledge

0 stars 0 forks source link

jvm 方法内联优化 (inlined) #9

Open hz90 opened 5 years ago

hz90 commented 5 years ago

方法内联也叫函数内联, 在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。 维基百科

public int add(int a,int b){ return a+b+1; } public void testadd(int a,int b){ int c=add(1,2); int d=add(2,3); } 编译后 public void testadd(int a,int b){ int c=1+2+1; int d=2+3+1; }

方法内部调用的其他方法的逻辑,嵌入到自身的方法中,其实就是减少入栈出栈的开销,指令执行地址的跳转, 内联条件: 1,热点代码,根据方法被执行频率很高,jvm编译模式决定,调用多少次是热点代码,客户端编译模式,1500,服务器编译模式10000,-XX:CompileThreshold来调整 2,方法体不能太大, 3,private ,static,final修饰符,这样jvm可以直接内联,