Возможно, дело в том, что во втором случае instance создаётся не при вызове метода getInstance(), а при загрузке класса в виртуальную машину. То есть, если вы каким-то образом обратитесь к этому классу не для того, чтобы получить instance, то он всё равно будет создан.