If I have:
for (int i; i != 100; i++) {
ArrayList<String> myList = buildList();
//... more work here
}
Do I have to set myList to null at the end of my loop to get the GC to reclaim the memory it uses for myList?
The GC will automatically clean up any variables that are no longer in scope.
A variable declared within a block, such as a for loop, will only be in scope within that block. Once the code has exited the block, the GC will remove it. This happens as soon as an iteration of the loop ends, so the list becomes eligible for garbage collection as soon as each iteration of the loop finishes.
The scope of a variable is also why i
would not be valid after your example loop.
Note that this only is the case if you use the variable only within the loop. If you pass it to another method that keeps a reference to it, your variable will not be garbage collected.