Mono can be compiled to native AOT executable using mkbundle. My question is, how is the garbage collection works? If I compile Mono into AOT executable, should I make modification in the codes, to release unused variables / objects ?
Roughly speaking, after AOT compilation your application no longer needs JIT at runtime, but you still get GC and almost everything CLR offers except some part of reflection (Emit related).
Limitations are documented in http://www.mono-project.com/AOT
You don't need to modify your code generally except you need to remove anything that AOT does not support.
References:
http://tirania.org/blog/archive/2006/Aug-17.html
http://tirania.org/blog/archive/2008/Nov-05.html
Miguel has other posts on AOT details too.