How does the garbage collector work in Android, and how do you prevent memory leaks in a large codebase for Samsung Electronics?