To answer this you really need to know Angular's garbage collection. It does a really good job. But if it thinks there is still a reference to an object or if something else is referencing it, then a memory leak can appear. You can use jQuery or any other library to create a circular reference via a DOM object.
Here's an example. http://plnkr.co/edit/nIt78S?p=preview
If you open controllers.js you'll see a jQuery $() to Angular $scope circular reference:
//*** CREATING MEMORY LEAK ***
$("#memory-leak").on('click', function() {
console.log("[HomeController " + myInstance + "] click()");
$scope.data.counter++;
});
Because the jQuery .on() method is attached to a div outside of the controller, it's never freed. You can test this by:
1) Opening the console
2) Navigating back and forth between Home and Data pages. Each time you do, notice a new Home Controller instance is created.
3) After you've created 3 or 4 instances, click the div that says "Memory Leak Test". You'll see 3 or 4 console logs from the above code, a memory leak!