From what I understand you are looking at, the bottom loop is no better. The reason being even if you are trying to reuse a single reference (Ex- something), the fact is the object (Ex - arrayOfStuff.get(i)) is still being referenced from the List (arrayOfStuff). To make the objects eligible for collection, they should not be referenced from any place. If you are sure about the life of the List after this point, you may decide to remove/free the objects from it, within a separate loop.
The optimization that can be done from a static perspective (ie no modification is happening to this List from any other thread), it's better to avoid the size() invocation repeatedly. That is if you are not expecting the size to change, then why calculate it again and again; after all it is not an array.length, it is list.size().