otSpot,家喻户晓的JVM,我们的Java和Scala程序运行在它上面。年复一年,一次又一次的迭代,经过无数工程师的不断优化,现在它的代码执行的速度和效率已经逼近本地编译的代码了。

  它的核心是一个JIT(Just-In-Time)编译器。JIT只有一个目的,是为了提升你代码的执行速度,这也是HotSpot能如此流行和成功的重要因素。

  JIT编译器都做了什么?

  你的代码在执行的时候,JVM会收集它运行的相关数据。一旦收集到了足够的数据,证明某个方法是热点(默认是1万次调用),JIT会介入进来,将“运行缓慢的”平台独立的的字节码转化成本地编译的,优化瘦身后的版本。

  有些优化是显而易见的:比如简单方法内联,删除无用代码,将库函数调用替换成本地方法等。不过JIT编译的威力远不止此。下面列举了它的一些非常有意思的优化:

  分而治之

  你是不是经常会这样写代码:

  StringBuilder sb = new StringBuilder("Ingredients: ");

  for (int i = 0; i < ingredients.length; i++) {

  if (i > 0) {

  sb.append(", ");

  }

  sb.append(ingredients[i]);

  }

  return sb.toString();

  或者这样:

  boolean nemoFound = false;

  for (int i = 0; i < fish.length; i++) {

  String curFish = fish[i];

  if (!nemoFound) {

  if (curFish.equals("Nemo")) {

  System.out.println("Nemo! There you are!");

  nemoFound = true;

  continue;

  }

  }

  if (nemoFound) {

  System.out.println("We already found Nemo!");

  } else {

  System.out.println("We still haven't found Nemo : (");

  }

  }