Java: Como a JVM otimizará a chamada para uma função vazia e vazia?

Vamos imaginar que temos as seguintes classes:

public class Message extends Object {}

public class Logger implements ILogger {
 public void log(Message m) {/*empty*/}
}

e o seguinte programa:

public static void main(String args[]) {
  ILogger l = new Logger();
  l.log((Message)null); // a)
  l.log(new Message()); // b)
}

O compilador Java removerá instruçõesa eb ? Em ambos os casos (remoção ou não remoção), qual é a lógica por trás da decisão do compilador Java?

questionAnswers(6)

yourAnswerToTheQuestion