Это деталь реализации, так как вам не нужно заботиться о том, что происходит под капотом виртуальной машины (если бы вам пришлось позаботиться об этом, вы бы потеряли истинную переносимость!).
Однако, поскольку управляемый код объединяется, деление всегда выполняется, и в случае нулевого знаменателя процессор сгенерирует исключение первого шанса, которое будет обнаружено средой выполнения и затем отражено как исключение высокого уровня.