Исполняемый файл Java и собственный исполняемый файл - это всего лишь набор машинного кода (с дополнительными аннотациями и прочим). Так что, по сути, нет никакой разницы с точки зрения того, насколько легко провести обратный инжиниринг.
Если вы компилируете с помощью javac, вы можете использовать флаг -g:none
, чтобы исключить компиляцию всей отладочной информации в исполняемый файл.