Speaking more generally, the target languages of an AOT compilation are not necessarily specific to native machine code but are defined rather arbitrarily.
Some academic papers use this word to mean the act of compiling the Java bytecode to C[1] or the timing when optimization pipeline are performed.
Ahead-of-time compiling for dynamically typed languages to native machine code or other static VM bytecode is possible in a limited number of cases only.
In most situations with fully AOT compiled programs and libraries, it is possible to remove part of a runtime environment, thus saving disk space, memory, battery life, and startup times (no JIT warmup phase), etc.
AOT compilers can perform complex and advanced code optimizations which in most cases of JITing will be considered much too costly.