象牙塔的案例和资讯已经很多年没有更新了,实在没有精力更新,需要最新案例请联系客服!
--- 我们没有销售只有技术,不善于也不需要宣传,服务好已有客户足以!---
Java 虚拟机总结给面试的你
编辑:象牙塔 技术部  |  点击率:1513次

   本篇主要针对Java虚拟机的晚期编译优化,Java内存模型与线程,线程安全与锁优化进行总结,其余部分总结请点击Java虚拟总结上篇 ,Java虚拟机总结篇。

20130808152352_5840.jpg

  一.晚期运行期优化
  即时编译器JIT的作用就是热点代码转换为平台相关的机器码,并进行优化,它并不是一个虚拟机所必须的部分,只能说有它是锦上添花。
  热点代码
  热点代码分类
   被多次调用的方法
   被多次调用的循环体
  热点探测判定方法
  ·基于采样的热点探测,虚拟机周期性地检查栈顶,发现某个方法经常出现在栈顶,那么这个方法就是热点方法,简单高效但不精确
   基于计数器热点探测,为每个方法建立计数器来统计执行次数,超过阈值就是热点方法,Hotpot就是采用这种方法。分为方法计数器(统计方法),回边计数器(统计循环)
  编译过程(Client Complier)
  第一阶段:将字节码构造成高级中间代码表示(HIR)
  第二阶段:将HIR变为LIR
  第三阶段:使用线性扫描算法,在LIR上分配寄存器,产生机器代码
  优化方法
  公共子表达式优化
  当一个表达式A的结果已经计算过了,且A中的所有变量都没有发生过变化,那么下一次要用到A时就不用计算了,而是直接取之前A的结果。
  数组边界检查消除
  方法内联
  逃逸分析
  逃逸的定义:一个在方法里定义的变量,作为参数传递给其他方法(方法逃逸),或者赋值给类变量(线程逃逸)。
  优化方法:
  栈上分配:不会逃逸的对象就不在堆上分配了,就在栈上分配,那么对象所占的空间就可以随栈帧的出栈而销毁,减少垃圾收集系统的压力。
  同步消除:如果一个变量肯定不会逃逸出线程,那么关于这个变量的同步措施就可以去掉。
  •   上一篇: Java虚拟机堆栈
  •   下一篇: Java内存模型与线程