Java: ¿Cómo optimizará JVM la llamada a una función vacía y vacía?

Imaginemos que tenemos las siguientes clases:

public class Message extends Object {}

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

y el siguiente programa:

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

¿El compilador de Java eliminará las declaraciones?a yb ? En ambos casos (eliminando o no eliminando), ¿cuál es la razón detrás de la decisión del compilador de Java?

Respuestas a la pregunta(6)

Su respuesta a la pregunta