Well, as you have already mentioned, when Java compiles some code it generates byte code - this is understood by the Virtual Machine, which will execute it. The JRE is what you install, it containes the JVM and any other resources needed for executing your byte code.
Garbage collection is used to clean up memory after it is no longer needed. When you have objects which are no longer referenced, the garbage collector will deallocate the memory so that its available for reuse. This is compared with other languages, like C, where the programmer must explicitly deallocate memory (via free) and needs to be careful not to cause memory leaks.
Sorry, but you are not allowed to view signatures , please Register or Login