You shouldn't depend on the garbage collection to stop your processes, you should add a termination method and call that when you want to switch it off.
As I understand it, when there are no more active pointers to a class, it will be available for garbage collection as with any other variable. This may not happen immediately, and in fact, may not happen as long as the app is running if it doesn't need to (memory is not an issue). I haven't seen a definition of what should happen in the meantime, but as you have stated, it obviously continues to run.